Web系プログラミング言語を選ぶ『基準』を考えてみた

   

Web系プログラミング言語というと主にサーバーサイドの言語を指すと思いますが、主要なものだけでも、結構な数があります。

・LL言語(ライトウェイト言語 = 軽量なスクリプト言語) = PHP, Ruby, Python, PerlなどのLAMPのPに当たる言語
・コンパイルした中間言語がVMで動く言語 = Java, C#
・新世代言語 = Go, node.js, Scala

このような多数の選択肢の中でどのような基準でプログラミング言語を選べばいいのかについて考えてみます。

新世代言語の必要性

新世代言語の特徴の一つは、並列性です。node.jsの場合、シングルスレッドノンブロッキングIOという特徴的なアーキテクチャが採用されています。(ほとんどの言語はブロッキングIOが基本です)

IOが発生しても処理がブロックせず、別リクエストの処理に移れるので、シングルスレッドで同時アクセスをさばけるというものです。

そのためには、コードの書き方が変わってて、IOを結果をコールバック関数で受け取るような書き方をします。

これだけだと、コールバック関数書けばいいだけなら簡単じゃんって思いますが、ファイルを複数読む場合にコールバック関数がネストして読みにくくなります。

「いやぁーーーーーー、やってらんねーーーーー!!?」ってなりますよね。

でも、こう書かないとシングルスレッドで同時アクセスをさばけないから仕方ありません。

とはいえ、このようなコールバック地獄にならないための仕組み(yeildやPromise)があります。

yeildの場合上記のように書けます(動作確認はしてないので、こんなイメージのコードで書けるという程度の認識にしてください)。

私がnode.jsを使ってた2013~14年にはyeildがなかったので、コールバック地獄なコードを書いてました。かなりしんどかったのですが、しんどいコードを書いていたおかげで、PHPやRubyなどの同期IOのコードを書くのがめっちゃ楽に感じられるようになりました。

しんどいコードを書いてまでシングルスレッドノンブロッキングIOをしたい理由はメモリーの節約です。

マルチスレッドだと、スレッドが起動されるためにスレッドが動作するためのワーキングメモリーが確保されます。

マルチスレッドにはC10K問題という有名な問題点があります。CはクライアントのことでKはキロバイトのキロ、つまり1000倍って意味です。

C10K問題とは「クライアントが10000を超えると、CPUは余裕があってもメモリーがいっぱいになってしまってそれ以上の同時アクセスをさばけない」というものなんです。

10000の同時アクセスを並列でさばこうとすると10000のスレッドを起動します。すると10000のワーキングメモリーが確保されます。それによってメモリーがいっぱいになってしまうということです。

これがシングルスレッドだと、「ワーキングメモリーは一つだけなので余裕だぜ」となるわけです。

そんなわけでnode.jsはプログラマーとしては修行になる言語であり、アーキテクトにとっては、メモリーの少ないサーバを有効活用するアーキテクチャとして捉えることが出来ます。

なので、node.jsを選ぶのであれば、上記のような理由が基準となります。

こういう風に技術的特性によって言語を選択する場合もあれば、もっと単純に「仕事を得やすい言語」という観点で選ぶことも出来ます。

仕事の需要で選ぶ場合

業務システム開発だったらJava、C#、PHPあたりが使われています。この中で圧倒的に案件数が多いのはJavaでしょう。

Webサービスやゲームやスマホアプリのバックエンドならば、PHP, Ruby, Javaが多いでしょう。

Javaって業務システムのイメージが強いけれど、こういう分野でも結構使われています。

私が参加した2社のスマホゲーム開発案件はどちらもサーバーサイドはJavaでした。フレームワークはSpringMVCが使われてました。

ECサイト開発に参加した際にもJavaが使われてました。私が元々Javaエンジニアだったので、別業種の案件でもJavaを使った案件に入りやすかったというのはあるかもしれませんが、ゲーム開発では、私はクライアントサイドを担当したので、サーバーサイドがJavaだったのは私のスキルとは関係がありません。

そんなわけで仕事でつぶしが利きやすいのはJavaなのかなぁと思います。個人的にはあまり好きな言語ではないんですけどね。需要の安定感は抜群です。

趣味の開発で使う場合

「趣味で使うなら、好きなの使えばいいじゃん」なんですけど、全く成約がないわけではありません。

ちょっとしたWebサービスを開発して、安いレンタルサーバで動かしたいという場合、使用するプログラミング言語は、レンタルサーバで動作する言語に限定されます。

多くのレンタルサーバはPHP, Ruby, Python, Perlをサポートしていますが、多くの場合、PHP以外はCGIモードでの動作となっているので、フレームワークを使った開発が出来ません。

CGIってリクエストが来る度にプロセスが起動されます。フレームワークが動作するためには数多くのプログラムをロードする必要があります。CGIだとそれらの読み込みがリクエストが発生する度に発生するので、動作が重くて使い物にならないんです。

ですから、フレームワークを使ったWebサービスをレンタルサーバで動かしたいとなると、選択肢はPHPだけになるんです。

VPSやクラウド、専用サーバを借りれば、好きな言語を使えるので、目的に応じて使い分けたらいいと思います。

「環境構築めんどくさいなぁ」ならPHPを選択してレンタルサーバで動かせばいいし、「Ruby使いたい!でも環境構築もできるだけ楽なのがいい!」だったらHerokuというクラウドサービスを使えばいいといった感じで、目的に合ったサービスが見つかると思います。

つまり、結論としては、自分の目的にあった言語を選べばいいということです。

目的によって選ぶ言語は決まる!

目的が就職・転職することであれば、応募先企業で使われている言語を選ぶことになります。

レンタルサーバでちょっとしたものを動かしたいという目的ならPHPになるし、メモリーの少ないサーバで大量アクセスをさばきたいということであればnode.jsを選ぶという風に目的によって、選ぶ言語は決まります。

自分の目的は何か?これがいちばん重要なんです。

ですから、「流行っているから!」とか「これから来そう!」っていう理由で選ぶよりも、「自分の目的は何か?」これを考えることが一番だと思います。

エージェントを使った方が転職活動は楽です

東京・大阪近郊のイケてるIT企業に転職したい人には『レバテックキャリア』

 東京・大阪近郊のエンジニア経験者向け転職サービスです。

このサービスを運営しているレバレジーズという会社はシステム開発もやっているので、現場の仕事をよくわかってくれてますし、ヒカ☆ラボというIT系の勉強会なども主催していたりteratailというプログラマー専用の質問サイトを運営してて好感が持てます。求人案件もWebやスマホの面白い仕事が多いのでいいと思います。

あとホームページ見ると分かるんですが、若くて美人の担当者が多いのもナイスなんです!私の場合(たぶんあなたも)、担当者が美人だと転職活動のモチベーションめちゃ上がりますからね笑

エンジニア未経験の方や地方在住の方にはDODAというエージェントをおすすめします。

エンジニア未経験の方や地方在住の方には『DODA』

全国の求人を扱っていて、しかもITエンジニア未経験の人にも転職支援をしてくれるエージェントです。

未経験の人はサポート対象外のエージェントが多い中、DODAは未経験者を支援し転職を成功させています。未経験の方こそエージェントから職務経歴書の作り方や面接の仕方のレクチャーを受けた方がずっとうまくいきます。

フリーランスになりたい人には『ギークスジョブ』

フリーランスエンジニアになるには人脈が必要と思われがちですが、ギークスジョブに登録して希望条件を伝えれば、自分に合った案件を紹介してもらえるんですよ!思ってるより全然簡単にフリーランスってなれるもんなんです。

東京・大阪・名古屋・福岡の案件を紹介してもらえます。

 - 勉強法