Rock Me!開発者ブログ

DEVELOPERS BLOG

新規開発案件のため、WEB開発トレンドをアップデートしてみた

年明けから本格的に新しいシステムを作りはじめているのですが、スクラッチで構築するのは4年ぶりになるため、ベースの技術も一新していきたいと思っています。

今のメインシステムは、2012年末にRock Me!に入社し、4ヶ月ほどで作りあげ、ベース部分は1、2年くらいかけてブラッシュアップしていきました。 システムがだいぶ落ち着いたころに娘が生まれ、そこからは子育てと平行モードに。 コードは書いていたけど、ベース技術はわりとそのままで、システム内のコンテンツを増やすことに注力していました。

娘が3歳になり、すこし子育ても落ち着いてきたのと、ビジネスの状況も変わってきたので、最近の技術トレンドを踏まえつつ、頭を開発モードに切り替えているところです。

今、色々と追っかけているところですが、どんな変化を取り込もうとしているかご紹介します。

インフラ

基本的にはAWSを採用していて、これはこのまま継続します。

VPC

現システムのリリースがちょうどVPCがデフォルトになった時期で、テスト含めるとちょっと移行はきついかなあと思い、見送っていました。 今思えば、あの時無理しておけばよかった気がしなくもないですが、ネットワーク構築がどういうものか、あまりわかってなかったのでしょうがないですね。

下記のような資料を参考に、実際に手を動かしているところです。慣れてきたらCloudFormationなど構築ツールを導入する予定です。

環境構築

今はchefを使っています。
naoyaさんの入門Chef Solo をきっかけに導入して、今のシステムは全部chefで構築、管理できるようになっています。 ただ、ちょっと複雑で見通し悪いかなという感じがあり、ここまで必要ない感かなと感じてます。 後述するようにRubyからPythonに切り替えていこうかと思っているので、ついでにAnsibleを試しているところです。
まあ、Ansibleはyamlな世界らしいので、あまりPython関係ないかもですが。

開発環境

chefを導入したころはchef + vagrantが流行っていたのですが、立ち上げの時間や容量など考えるとめんどくさくなってしまい、使わなくなっていきました。 結局、安いec2を立ち上げっぱなしで、簡単な修正は直でVimで、そこそこのものはmacにsshfsして、IDEから操作して・・・みたいな開発をしています。(遅延は思ったより気にならない) ただ、これはこれでIDEの機能をフルに使えなかったりする難点もあります。

Docker

そんな中、vagrant -> dockerみたいな流れもあり、Dockerやりたいなあとは思っていたのですが、なかなか手がでず。 初めはいまいちどんな風に使ったらいいのか、どんな仕組みになっているのかが飲み込めず、放置してしまっていました。 これを機に仕組みの理解と実際に手を動かしてみると、下記のようなキーワードがしっくりきました。

  • プロセスを実行するツール
  • アプリケーションの入れ物
  • OSレベルの仮想化(vagrantなどはハードウェアレベルの仮想化)

実際にdocker内でpsすると、プロセスはひとつ、もしくは少数しか動いていないんですよね。
ただ、まだモヤモヤしている部分があって、このプロセスがOSの機能をどう利用しているのか、各ライブラリをどのように使っているのかのイメージがつかめないてないんですよね。 この辺は地道にちゃんと勉強しなきゃですね。 低レベルなところでのUNIXプログラミングみたいのをやればいいのか、ここを理解できるとだいぶスッキリする気がします。

実用的には、開発時に公式のイメージを利用して、さくっとMySQLを立てるとか、そんなレベルから初めていきます。 フル活用するとプロダクションでオーケストレーションツールを使って・・・と、広がっていきますが、まだ自分の知識では扱えないかなという印象です。 ただ、micro service的に作っていければ自然とマッチしていくと思うので、引き続きウォッチしていくつもりです。

プログラム言語、フレームワーク

リリース当初はすべてPHPだったのですが、途中でバックエンドはRailsで刷新しました。 ただ、どうもこれが肌に合わず・・・なぜだか、のめり込めない自分がいました。 勉強不足も多分にあるのですが、ブラックボックス感がぬぐえず。。

というわけで最近の機械学習流行りもありPython、Djangoを試しているところです。 まだ使いはじめですが、Pythonの考え方やDjangoの考え方はわりと共感できるかなと思っています。

WEBサーバ

今はほぼapacheなのですが、そろそろnginx使ってみようかな、というようなレベルです。 apacheでもいいのですが、せっかくのチャンスなので、nginx + gunicorn + djangoみたいな組み合わせを試していこうかと思います。

DBサーバ

今はmysql5.5とMongoDBを使っています。 auroraやらpostgresql、DynamoDB、redisなど、必要に応じて選択していくつもりです。

まとめ

下の方はまだこれからなので、だいぶ記事が薄いですね(笑)

色々なことが利用可能になっていってるけども、ちゃんとしたベースの知識がないと役に立たないことも痛感しました。 何となくわかっているつもりの知識がけっこう多いもんです。。
VPCを構築するなら、もちろんネットワークの知識が必要だし、Dockerをちゃんと運用するには、Linuxやプログラムがどう動いているのかLowレベルのところで理解していないとやれないなと強く感じました。

また、知識がないからといって実行しないのも良くないなと。 ベタですが、やはり知識と経験のバランスが大切ですね。

また各トピックについて理解が進んだら記事を書いていこうと思います。