《コラム》プロダクトの開発言語ってどうやって選ぶの?
注目スタートアップのCTO 4人に聞きました!
【株式会社LIG × G’s ACADEMY】による連載コラム! ジーズアカデミーのサイトにお越しになる「起業家を目指す方」「エンジニアを目指す方」に向けて役立つ情報をお送りしています。
Java、Peal、Ruby、C言語、SQL……と、開発をおこなうためのプログラミング言語の数は想像以上にたくさんあります。プロダクトの開発を前に、その中からどの言語を選ぶべきかと迷っている方も多いことでしょう。
そこで今回は、著名ベンチャーのCTOとして企業の土台を支える4人の技術者の方に、自社で使っている言語は何か、なぜその言語を選んだか、その言語のメリット・デメリットなどをお聞きしました。お答えいただいたのは、株式会社スクー、株式会社Socket、ChatWork株式会社、トークノート株式会社です。
■ 答えてくれたのはこちらの4人!
伊東 弘満CTO/株式会社スクー
’96年よりソフトハウスにて様々な言語を用いた受託開発業務に従事。大規模ブログサービスの運用業務を経たのち、大手ネットワーク会社での動画共有サービスの立ち上げ後、2011年にgloopsに入社。システム基盤部長及びアーキテクトとして最大1600台まで増えたサーバ運用部隊のマネジメントを担当。’14年に株式会社スクーのインフラ開発部門責任者として入社し、同社サービスのインフラをより安定した環境に刷新するなどの業務を担当。同年10月に同社執行役員に就任。
生内 洋平CTO/株式会社Socket
1979年12月23日生まれ。弘前大学理工学部卒業。生家商売の自主流通米・園芸作品・資材販売をはじめ、大学研究室との共同研究、自身の音楽活動・音楽レーベル運営・デザイン企業所属等を経て、各種大手企業・自治体等の広報デザイン・システム開発業務に従事。 2012年11月にCEOの安藤とともに株式会社Socket創業。2014年9月にリリースしたスマホ販促プラットフォーム「Flipdesk」の企画開発全般に関わる。「Flipdesk」は東急ハンズ、タビオ、アダストリア、ビームスなど約240社ほど導入され利用されている。
山本 正喜CTO/ChatWork株式会社
1980年生まれ。電気通信大学情報工学科卒業。大学在学中より兄の山本敏行とともに、兄弟で株式会社EC studioを2000年に創業。以来、製品開発担当として多数のサービス開発に携わり、2011年3月にクラウド型ビジネスチャットツール「チャットワーク」を開発。2012年には社名をChatWorkへと変更し、チャットワークをビジネスコミュニケーションにおける世界のスタンダードにすべく、全社を挙げて取り組んでいる。
藤井 拓也CTO/トークノート株式会社
1976年03月27日生まれ。1994年から8年間程、小説家を志望しながら様々な職業を転々とする。2002年 、SIerとして通信系会社の開発現場に。開発プロジェクトは、携帯電話による半二重通話システムや、データストレージサービス、Webメールサービスの開発などに8年間従事。 2011年、知人のベンチャー企業の立ち上げに参加。技術系取締役として、賃貸特化型のコンシェルジュサービス、O2O特化型のSNSサービスの開発に携わったのちに退職。その後、2013年5月、Talknoteに入社。開発責任者としてトークノートサービス拡大を支える。
■ 伊東弘満CTO/株式会社スクー の場合
Q1.サービスの概略を教えてください
株式会社スクーは、「世の中から卒業をなくす」をビジョンに掲げ、ユーザーの皆さんに学ぶことによって人生を変えられる機会を提供する会社です。
弊社の運営する『schoo WEB-campus』は、ただ学習動画を見るためのサイトではありません。ともに学ぶ人とのコミュニケーションや、その先にあるキャリアを可視化することによって実社会と繋がり、「schoo WEB-campusでの学びが、あなたの人生を変える」ことを目指しています。
Q2. 開発に使用したプログラミング言語は?
サービスが今のかたちになってからはPHP言語を利用し、フレームワークにはCodeIgniterを採用しています。
Q3. その言語を選んだ理由は?
サービス開始にともないスピード感のある開発を必須とし、また、仕様変更も開発中に多々発生することを想定し、柔軟性と自由度の高い言語としてPHPを採用しました。
さらに、PHPはデザイナーでも読み書きできる人が多く、バックエンドとフロントエンドの接合点での調整がしやすいのも選定理由の一つです。
Q4. PHPを選択して良かったこと(PHPのメリット)は?
極端な話の例として、納期直前における仕様変更にも、力技で対応することが可能だったりと、コードを書いている上での柔軟性の高さが、PHP言語の一番のメリットかと思います。
それ以外にも良くも悪くも枯れた言語であるため、ノウハウ(バッドノウハウ含む)が書籍にもWeb上にも多数公開されていたり、また、各種ライブラリが自社で開発しなくとも用意されていたりするのも、開発効率という点においてはメリットとなります。
加えて、言語経験者も非常に多いことから、組織拡大時におけるエンジニア採用のハードルが高くないこともメリットとして挙げられます。
Q5. PHPを選択して悪かったこと(PHPのデメリット)は?
柔軟性の高さ故……ですが、設計思想や方針をある程度最初からキッチリ定めておかないと、その後の開発においては古いコードがメンテナンスしづらい「レガシーコード」となりやすいことが一番のデメリットです。
さらに、PHPでは、このレガシーコードの修正がつらいというイメージがエンジニアに付きまとってしまっています。そのため、日本では特にPHPからほかの言語に流れていってしまっているエンジニアが多いことも、ここ最近ではデメリットになると思います。
■ 生内洋平CTO/株式会社Socket の場合
Q1. サービスの概略を教えてください
『Flipdesk』というサービスをつくっています。ECをはじめとしたオンラインサービスにも、リアルな店舗などと同じく「集客・調客」→「接客」→「コンバージョン」という流れがあります。『Flipdesk』は、この内の「接客」に着目し、自社サービスにおけるビジターのCVRを向上させるようなアプローチを提供するプラットフォームです。
Q2. 開発に使用したプログラミング言語は?
初期開発はPHP、Ruby on Rails、並列分散が必要になってきたフェーズになりScala on Playを導入し始めました。
Q3. その言語を選んだ理由は?
ノンフレームワークなPHPは、サービスの本当の初期にとりあえず実証できるものをささっと1人で作る、といったことに非常に向いているので、モックアップを作るときにはいつもPHPを使っています。WebネイティブでありながらCに近いノリでOSの様々な部分に割と気軽にアクセスできるので、「フレームワークの仕様的にこれはできない(時間がかかる)」といった障壁に初期の事業コンセプトが惑わされにくいんです。
初期の事業検証が終わったら、サービスプロトタイプをチームで開発するフェーズに入ります。まだ社内エンジニアがいなかった僕らにとっては「外部の人にも手伝ってもらいやすい」ことが、言語を選ぶ上で何より重要な指標でした。時流的にも、僕らの周りにも、優れたRailsのエンジニアが多くいました。Railsを選んだ理由はそこです。ただ、僕自身のRailsの経験値は当時そこまで高くなかったので、個人的にはそれなりに労を割きましたが(笑)
また、Railsを選択したときから、インフラのパフォーマンスについてはしばらくはお金で解決しようと決めていたため、処理の最適化よりも、とにかく機能の拡充を優先していました。しかし、サービスが成長すればするほど、パフォーマンスをお金で買うことにも限界がきます。そうしたフェーズで「きちんとしたインフラを組まないとな」と考えて、採用したのがScala on Playです。
Q4. その言語を選択して良かったこと(メリット)は?
Railsはやはりエンジニア層の広さが魅力ですし、様々な言語の経験者が「次の言語」としてモチベーション高く取り組んでくれます。
チュートリアルやコードフォーマットなども実用に耐えるものがいくつもリリースされていますし、マネジメント側としては非常にスタートコストが低く設定できます。
こうした点が実用レベルで標準化されている点は他の追随を許さないと思っています。
僕にとっては、よくメリットとしてあげられる厚いコミュニティそのものよりも、そのコミュニティからのアウトプットの質が非常に高いことが、Railsの素晴らしさだなと感じています。
現在はプロジェクトのなかでパフォーマンスが必要な部分をScalaで順に書き換えていく、といったアプローチを取っています。Scalaは、やはり大規模なトラフィックをさばく構成において、Javaのライブラリが流用できたり、JVMベースのパフォーマンス最適化知見が割と世の中にある、という点が魅力です。
関数プログラミングの様々な手法にもかなり完成度の高いレベルで対応できていたり、ネイティブで並列処理をおこなえるフレームワークが整備されていたりと、加速度的に大きくなりつつあるサービスのトラフィックや、高度な機能要求に応えられるインフラを構築できる最も有力な選択肢として捉えています。
Q5. その言語を選択して悪かったこと(デメリット)は?
Railsは、Rails Wayの出来の良さに感銘を受ける反面、やはりサービスが拡充してくるとそこがネックになります。
特にReact.jsやVue.jsなどの新しめのフレームワークとの親和性はさほど高くないため、view以降のフロントエンドの扱いや今後の刷新にはそれなりに手がかかるだろうと考えています。
また、事業に合わせてシステムをメンテナンスしていると必ずいつかはぶつかるのが、Active Recordの単一データストア前提構造です。
当社もすでにそのフェーズのお迎えは済んでいて、Socket開発チームではRailsを工夫して使うのはやめ、Railsが適してない箇所はさっさとほかのプラットフォームに移行するアプローチを選択しました。
トラフィックさばき用に選択したScalaも、Javaをはじめとする静的型付き言語の経験がないニューフェイスをジョインさせにくいところはネックかと考えています。今後ジョインしてもらえそうなエンジニアの幅を狭めるというのは正直あまりやりたくなかったのですが、事業のフェーズを考えればやむを得ない選択でした。
また、エンジニアの実力差が出やすい言語構造でもあるため、チーム一丸となって経験の不足しているメンバーのフォローアップ体制を整えるのも大事な視点と考えています。
■ 山本正喜CTO/ChatWork株式会社 の場合
Q1. サービスの概略を教えてください
『チャットワーク』は、Webブラウザで動作するクラウド型のビジネスチャットツールです。メール・電話・会議などのかわりにチャットを使うことでコミュニケーションコストを大幅に下げることができます。現在の導入実績は7万3,000社を越えており、日本最大級のビジネスチャットサービスとなっています。
Q2. 開発に使用したプログラミング言語は?
サービス開発に使用している主な言語はPHPですが、現在Scalaに書き換えた新システムを準備中です。
Q3. その言語を選んだ理由を教えてください
▷ PHP
・10年以上前から利用している(当時はPHP4が出たばかりぐらい)
・学習の容易さ、運用の楽さ、パフォーマンス、ライブラリの充実度などから選定
▷ Scala
・静的言語としての保守性とパフォーマンスの高さ(IDEも充実)
・動的言語からスイッチして成功した実績があること(twitter, dwangoなど)
・AWSはJava SDKが最も充実しており、ずっと利用したかった
・チャットのリアルタイム処理と相性がいい(akkaなど)
Q4. その言語を選択して良かったこと(メリット)は?
▷ PHP
・構文が平易で組み込み関数が多く、学習がしやすい
・書籍やWeb上での情報が豊富
・開発者が多く、エンジニア採用しやすい
▷ Scala
・静的言語かつ関数型で書くことにより、保守性&パフォーマンスともに高いコードが書ける
・豊富な運用実績と周辺ツールがあるJVMインフラで運用可能
・Scalaに興味がある技術的にエッジの立ったエンジニアを採用できる
Q5. その言語を選択して悪かったこと(デメリット)は?
▷ PHP
・大規模なソースコードになると保守が困難になりがち
・高負荷な環境でのハマりどころが多い(特にセッション、DB接続まわり)
▷ Scala
・学習コストの高さ
・まだまだ習熟したエンジニアの数が少なく、採用が困難
■ 藤井拓也CTO/トークノート株式会社 の場合
Q1. サービスの概略を教えてください
『Talknote』は、メール・チャット・SNSのメリットを凝縮した社内コミュニケーションツールです。ビジネスシーンでメールに代わって誰にでも利用されるようなサービスを目指しています。
Q2. 開発に使用したプログラミング言語は?
Webアプリケーションの部分はPHPで書かれていますが、iOSアプリ・Androidアプリも提供しているので、当然Objective-C、Javaも扱います。また、一部ではNode.js、Go言語、Scalaも使っています。
Q3. その言語を選んだ理由は?
実は、創業当初のエンジニアはお会いすることなく退職してしまったため、後から入ってきたぼくらにはまったく理由がわかりません(笑)
現在メインで使っている言語はPHPですが、今のぼくらがジョインした頃にはすでにシステムが動いていたので、コードベースを特に変える必要がない限りは、そのまま使い続けている、という状況です。
ただ、Go言語やScalaについては、最近のメンバーに自由に選んでもらった結果です。システムの規模や事業のステージ、あとその言語の使いどころにもよると思いますが、技術選定を中央集権的にマネジメントする必要をまだ感じていないので、それぞれ知見のあるメンバーが選んだのなら文句を言わないようにしています。
Q4. その言語を選択して良かったこと(メリット)は?
メンバーの中で「PHPが好き!」という人は一人としていません(笑)
ただ、やはり “十分に枯れている” というのはメリットとしては大きいかな、と考えています。
また、エンジニアはただ作ることを目的化しがちーーというより、愛がある言語だとずっと触っていたくなる生き物。ですので、純粋に事業や製品のバリューをどう発揮していくか、という点にチームの意識を向けさせるためには、むしろ適度な距離感を保てて良かったのかな、と逆に思いますね。
Q5. その言語を選択して悪かったこと(デメリット)は?
基本的にデメリットはないのですが、唯一の難点は、PHPの層が広いため、エンジニアの採用に対して技術的なプレゼンスを打ち出しにくいことです。
とはいえ、新しいサービスをローンチする際は事業が継続するかどうかも分からないので、そんなことまで考えて言語を選択するのはナンセンスでしかないでしょう。
ですので、後からきたぼくらが自分たちの技術力でそのあたりをがんばって解決していくのが当たり前ということになるのですが、もしも最初からもっと “イケてる” 技術が導入されていたら、ちょっとは楽になっていたのにな……という、まあ、一種の愚痴みたいなものです(笑)
■ まとめ
注目スタートアップでCTOという重責を担う4人の方に、それぞれのサービス構築に使用している言語についてご紹介いただきました。
4企業のなかでは、古参のPHPから、最近のものではScalaを導入しているという意見が目立つようでした。また、ケースごとに様々な言語の合わせ技を発揮するところも。
最初の言語選びは大切です。頭のなかで思い描くサービスやエンジニアとの相性を考えながら、最適なプログラミング言語はなんなのか、先輩方の意見を参考に検討してみてくださいね。
ライター:齋藤 玲乃
編集:LIGMO