こんにちは。おいかわです。
弊社のプロダクトの次期バージョン開発を検討しています。
日々、リファクタリングなど進めていますが技術的負債になっている部分も多く、作りなおそうぜって話になってきています。
現在はCakePHPで実装されているのですが、他フレームワークや他言語での開発も検討しています。
そこで、その辺りをさらっとまとめました。
PHP 公式サイト(英語)
言わずと知れた最もメジャーなWeb開発言語。弊社でもWeb系開発はPHPをメインに使ってます。動的型付け言語。
○長所
- メジャーなだけに技術者も多くリソース確保しやすい。
- ネット上の情報も豊富だし、フレームワークも選択肢が増えてきました。
- デプロイが簡単
×短所
- 型とかエラー処理がいい加減なのが未だに馴染めません。
- 標準関数がクラスとして提供されていないなど、オブジェクト指向で書くにはまだ完全ではないのでは?
- Xdebug使えばステップ実行も出来ますが、使うまでがけっこう面倒。
主なフレームワーク
- CakePHP 公式サイト
- Railsライクで日本での人気が高い。
- 弊社でも使用中。
- 最近リリースされた3.0は速い・配列地獄から解放されたらしい。
- Symfony 日本語情報サイト
- DIコンテナ採用してたり、Twigというテンプレートエンジン持ってたり開発しやすそう。
- Laravel 公式サイト
- CodeIgniter 公式サイト(英語)
- 軽量で速度重視。学習コストも少なめらしく習得速度も早そうです。
- 元々GPLライセンスと互換性のない独自ライセンスだったのがMITライセンスに変わりました。
- FuelPHP FuelPHP 日本語Document
- Phalcon 公式サイト
- Yii 公式サイト
- 軽量で洗練されたキャッシュ機構を持ってるらしい。
- だから高負荷のアプリ、例えばポータル・CMS・EC等に向いてるらしい
採用しているWebサービス
Hack Hack公式サイト(英語)
Facebookが開発したHHVM(HipHop Virtual Machine)で動作する言語でPHPと互換性があります。オープンソースです。
HHVM公式サイト(英語)
○長所
×短所
- HTML内に書くことが出来ない。(HTML内に書くとゴチャゴチャしてしまうのでむしろ長所?)
- Facebookが使用をやめたらどうなるんですかね?
主なフレームワーク
- PHPのものがそのまま使えるそうです。
採用しているWebサービス
Ruby 公式サイト
国産のオブジェクト指向スクリプト言語。フレームワークのRuby on Railsが有名。動的型付け言語。
○長所
- 国産なので日本語資料が豊富!
- コードが楽しく・綺麗に書けるらしい
- ライブラリ(gem)が豊富
- Railsの威力
×短所
- スクリプト言語なので実行速度は遅い
- バージョンが上がる毎に記法が増えていくが追い切れないという感想も
主なフレームワーク
- Ruby on Rails 日本語チュートリアル
- Sinatra 公式サイト(英語)
- Lotus 公式サイト(英語)
- コードの分割が簡単になるそうです。あまり情報無いですね。
採用しているWebサービス
- クックパッド、nanapi
Python 公式サイト(英語)
Webに限らず様々な分野で使われてる汎用言語です。
誰が書いても同じようなコードになるような設計思想だそうです。動的型付け言語。
○長所
- 誰が書いても同じようなコードになる=可読性の高さ=保守のしやすさ
- 豊富なライブラリ
- Cで書かれているため(主な実装のCPython)パフォーマンスも良い
×短所
- 最新バージョンは3だが2系からの移行が進んでおらずライブラリが対応していない場合も
主なフレームワーク
- Django 日本語ドキュメント
- Flask 日本語ドキュメント
- 提供する機能を最小限に抑えた「マイクロフレームワーク」
- ということは自前で色々作る必要があるっぽい
- Bottle 公式サイト(英語)
- こちらもマイクロフレームワーク
- なんとbottle.pyという1ファイルのみ
- Tornado 日本語ドキュメント
- シンプルで高速なWebフレームワークと非同期通信ライブラリ
- Facebookが作った
- 数万に至るまでコネクションをオープンできユーザ毎に長時間に渡るコネクションを必要とするアプリケーションに適しているとのこと
- Pyramid 日本語ドキュメント
採用しているWebサービス
Scala 公式サイト(英語)
標準のJavaプラットフォーム上で動作する 「オブジェクト指向言語と関数型言語の概念を結合した」言語
○長所
- 既存の豊富なJavaライブラリをそのまま活用できる
- オブジェクト指向と関数型プログラミングで簡潔な記述が可能
- コンパイルされるのでスクリプト言語に比べ高速
×短所
- 習得コストは若干高そう
主なフレームワーク
採用しているWebサービス
Go 公式サイト(英語)
Google様によって開発されている。静的型付け言語。
結構自分でフレームワーク作ってる人も多いです。
○長所
- Goルーチンという並列処理がある
- エラー処理を忘れにくい言語設計。go言語では一般的に返り値の二番目にエラーが設定されるので忘れにくいそうです。素晴らしい。
- LinuxでもMacでもWindowsでもコンパイル可能(クロスコンパイル)
×短所
- 新しい言語なので実績がまだまだ少ない
- 技術者も少ない
主なフレームワーク
- revel 公式サイト(英語)
- ScalaのPlay Frameworkを参考に作られているフルスタックフレームワーク。
- コード変更を検知して自動リロードしてくれるとか
- 詳しくはこちらで
- martini README
- Beego 公式サイト(英語)
- goweb 公式サイト(英語)
採用しているWebサービス
- Docker、Dropbox
C# 公式サイト(MSDN)
Microsoft様が開発した言語。.Netにおける中心的な言語だそうです。静的型付け言語。
○長所
- Visual Studioによる生産性の高さ
- .NET Frameworkによる生産性の高さ
- 弊社内にエンジニアがいっぱいいる!(重要)
×短所
- WindowsServer+IISに固定される(実際は他の環境でも出来るらしいが、やる意味はあるのか)
- 普通にやろうとすると、もろもろ有料のためコストはかかる
- 言語仕様がオープンになったそうですが、やはりMS次第
主なフレームワーク
- ASP.NET MVC 公式サイト(MSDN)
- Nancy 公式サイト(英語)
採用しているWebサービス
Java
今からやるならScalaでいいじゃんってことで割愛
まとめ
自社サービスはどこに一番コストが掛かるかというと、やはり運用・保守だと思うんです。
その点からPythonの誰が書いても同じようなコードになるという思想はとても魅力的です。Goのエラー処理もそうですね。
また、コードのほとんど(View含め)がコンパイル時にチェックされるという点でScalaやGoのコンパイラ言語も良さそうです。
ただTomcatなどAPサーバーが必要なので管理対象が増えるのがめんどい・・・
フレームワークに関してはどの言語を選んでも選択肢が色々あって困ることは無さそうですね。 新しいメンバーが入って来た時のことを考えると情報の転がっているフルスタックなフレームワークを選択した方が良さそうですね。
ところで最近、ジョーザーの火力不足を感じています。緑属性は初手から火力アップするアビがスイッチングウィンバック(SSR旧ワムウ)くらいしかなく、それも持ってないため最近の極では雑魚すら1つも撃破出来ないことも多いです。
代わりにメインアタッカーになりつつあるのが、承太郎&イギー(通称:犬太郎)です。
自身のアビに加え勇気の産物、白属性ATKブーストという火力アップ系アビの装備で高火力+遅延を実現しています。
そろそろワールドDIOが実装されると思いますが楽しみですね!