大人が書くプログラムは常にバランスの上に成り立つ。
長らくウェブアプリをCodeigniterで書いたんだけど、ついに捨てる時が来た気がする。
どういうことかというと、軽い(=機能が少ない)フレームワークと重い(=機能が多い)フレームワークについては長い間、優劣について議論がなされてきた。
しかし、ウェブサービスをひとりもしくは数人で作ろうかと考えると、できるだけコードを書かないですませたい。
それこそが高い生産性を出す方法だからだ。最近のフレームワークは「会員ログイン」なんていう面倒くさいけど、誰もが使う機能を包含している。
当然、重いフレームワークは学習コストがかかる。しかし、そのコストはずっと高いわけではなくだんだん減っていく。
PythonとTkinterでプログラムを書き終えたので、PythonでWebアプリもどうだろうと思いました。
Python+Djangoという組み合わせがたしかに旬ではあります。
DjangoはApacheのhttpd.confに「サイトの定義をしなきゃいけない」
これはちょっと考えられない。
どれだけDjangoがスーパーすごいフレームワークだとしてもポータビリティがめちゃくちゃ悪い。
以下のhttpd.conf内の定義例を見てほしい。
もう、特定のDjangoプロジェクトを決め打ちで書かねばならない。
LoadModule wsgi_module /home/ubuntu/project/env/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so WSGIScriptAlias / /home/ubuntu/project/project/wsgi.py WSGIPythonPath /home/ubuntu/project:/home/ubuntu/project/env/lib/python3.6/site-packages <Directory /home/ubuntu/project/project> <Files wsgi.py> Require all granted </Files> </Directory> Alias /static/ /home/ubuntu/project/static/ <Directory /home/ubuntu/project/static> Require all granted </Directory>
この定義をすると、ドキュメントルート下のindex.phpすら見えなくなる。
Apacheの定義をいじるのはバランスが悪い。
そういう犠牲をDjangoの多くの本には書いていない。
Pythonでウェブアプリを書くということが無理なんだと思った。
Pythonはすばらしいけど、小規模Webサーバーアプリには現時点では向かない。
(Tornadoに始まり、今はFastAPIなどによるまったく新しいWEBアプリの作り方がPythonにはあります。)
PHPは
PHPフレームワークから最もメジャーなLaravelを選んでみた。
お勉強と開発できるかで、また学習コストのバランスなんだけどね。
こういう時にはAmazonの”Kindle Unliited”はとてもありがたいです。
一ヶ月980円で乱読できますからね。
Laravelがどこまで生産性をあげられるかはよくわからないまま、Rubyの研究をしてみた。
HomeBrewを整理していると
ところで
mysqlをインストールしようかとbrew doctorで健全性を調べていたら、ボロボロ。
とくにpython3.7系がインストールされていないのにいろいろあって文句言われる。
たぶんpython3をPythonのサイトからダウンロードしたdmgパッケージで入れたんじゃなかったかな?
少なくともhomebrewの預かりしならないところでインストールした気がする。
でもってPython3.7系をすべて消した。(ここを見ながら)、
で、PYthon3を導入する前にpyenvからインストールしようとした。
するとなんでかわからないけどPHP7.3も依存関係の都合上、入ってしまった。
よくわからない。
Python3は3.9.1が導入された。
pyenv上では3.9.0までしかサポートされていないので、しばらく放置。
(2023/5:追記 最近ついにPython2.x系の両方を入れなくてよいようだ。pyenvなんていうバカなものもいらない。バンザイ)
こういういろんなパッケージをHomebrew, Composer, PIP, などでインストールすることは簡単だけど、なにが起こっているのかさっぱりわからない。若干、不安。
MySQL
Apacheは’sudo apachectl start|stop|restart’
httpd.confの場所は’apachectl -V’ で最後に出る。
mysqlは’mysql.serer start|stop|status’
セキュリティのためにmysql_secure_installationを勧められるけど、無視。
‘mysql -uroot’ (ユーザーroot、パスワードなし)でログインできる。
ログインしてから
mysql> USE mysql; mysql> ALTER USER 'root'@'localhost' identified BY '任意のパスワード';
くらいはする。
これで’mysql -uroot -p’でログイン。
Rubyではどうだ
このブログの過去を調べると、Ruby on Railsを2007年ごろ遊んでいた。
Railsもたいしたもので、13年も生き延びている。
ただし、Railsを入れるといろんなものの導入が必要。
インストールを試すと、Rails, webpacker, yarn(Javascriptの旧npm), node.js, などさまざまなモノをインストールしないと動きません。
つまりインターネットで動かす場合、VPS, Heroku, Google Cloud9などRailsサポートをうたっているところでないと、事実上、動かせないと思います。
レンタルサーバーでは無理です。
商用
しかし、日本のサーバーを調べるとLaravelは200-300サイトですが、Railsは3000以上のサイトが稼働しているようです。
これは環境構築のむつかしさよりも、アプリケーションを作る生産性が高いということではないでしょうか。
実際にRubyはプログラミング言語としては相当に高度で他の言語には見られない工夫が随所にあります。
見方をかえればとても癖がある言語で、一般的にはオススメしません。
初めて勉強するプログラミング言語がRubyというのは止めたほうがいい。
Pythonのような言語のほうがきちんとコンピュータを知ることができると思います。
しかし、ウェブアプリケーションを高い生産性で書くという観点から見るとRubyはPHPよりも優れていると思います。
そしてRuby On Railsは今、アプリケーションの生産性の点から見過ごすわけにいかないように思います。 こんな記事もあります。
調べるとチュートリアルが日本語で大量にあるんですね。これは学習コストを大幅に減らしますね。
ひとつやってみます。
「個人開発をはじめよう」という本があり、多くのアプリケーションをひとりで作っているエンジニアへのインタビュー記事が載っています。
個人でアプリケーション関連ビジネスをしようという人にはとても有用な本です。
この本ではやはり多くの人がRuby On Railsを使っています。(ちょっと古いけど)
ただし、この本の中にでてきませんが、アプリケーションそのもので稼ぐことよりも、アプリケーションを集客ツールだと考えたほうがよいように思います。
世の中にはたくさんのウェブマーケティングの手法があり、SEOだのなんだの言っていますが、ちょっとおもしろいアプリを作ったほうが簡単に集客できます。集客ツールという考え方は、ハードルが高いため語られていませんが、重要なアイデアです。プログラミングがまるで一般的なノウハウではないので語られないにすぎません。
理由はいろいろあれど、ひとりでウェブサービスを作って管理するという流れはだんだん大きくなるように思います。