· golang Go言語 PHP

#golang PHPerがGo言語を学ぶ理由

  • このエントリーをはてなブックマークに追加

この記事は、mikespookさんの2012/8/10の記事Why you PHP guys should learn Golangの非公式翻訳です。詳細はこの記事をご参照下さい。

This post is the Japanese translated post of mikespook’s post:Why you PHP guys should learn Golang.

1年前の記事ですが、興味深かったので、翻訳してみました。
翻訳にミスなどがありましたら、ご連絡頂けると嬉しいです。

PHPerがGo言語を学ぶ理由

gopher-talks

Go あるいは Go言語はオープンソースで、コミュニティがあり、早くて、一貫性が有り、スケーラブルで、生産的言語で、Googleによって考案されました。
おおくのアプリケーションがGoで構築されています。Rob Pikeは“我々は、C++プログラマが代替としてGoに目をむけることを期待している”と言っているけれども、私は、PHPerがGo言語を学ぶべきだと考えています。
それがなぜかをお話しましょう。

学ぶのが簡単

PHPは学ぶのが簡単です。Go言語はPHPと同じくらい簡単です。

PHPの文法は、C言語系列(C/C++/Javaなど)の文法に似通っています。
それらの言語を経験しているなら、PHPに最初に出会っても書くのはそれほど難しくありません。

Go言語もC系列のプログラミング言語です。えっと少し異なるところもありますが。たとえば、“for”キーワードはPHPのものと似ていますが、括弧は必要ありません。また、条件のキーワードである“if”も括弧は要りません。詳細はEffective Goで読むことができます。

Go言語は25のキーワードと47の演算子、区切り文字、他の特別なトークンだけしかありません。すべてのリテラルを覚える必要はありません。型システムは、非常に優れていて、使うのも簡単です。
No huge OO but a practical struct type with methods on it.
インターフェース設計はGo言語での私の好きな部分の1つです。あなたがA Tour of Goを終えたら、PHPの経験に基づいて、すぐにGo言語で書くことができるでしょう。

使うのが簡単

あなたのPHPスクリプトは SAPIコンポーネント:webサーバーモジュール、PHP-FPM、CLIによって評価されます。
PHP開発に必要な全ては、SAPI環境です。環境の配置は、PHPビギナーが理解するには最も難しい部分です。

すべてのGo言語のコードはコンパイル・リンクされますので、実行環境をデプロイする必要ありません。
PHP環境のデプロイと比べるとGoのデプロイはそれほど複雑ではありません。でもPHP環境のデプロイが本当に複雑だと本当に思っていますか?そんなことはないんですよ。本当に!
PHP環境のデプロイと比較すると、それほど複雑ではありません。PHP環境のデプロイはほんと複雑と思いませんか?私はそう思いません。(訳者:誤記かな?)

ビルド環境をデプロイするのは、3つのステップだけです:

(訳者:これらをまとめて実行できるスクリプト goinstallというツールを書きましたのでよかったら使用してみてください(PR))

あるいは、1ステップだけなら、バイナリパッケージを使ってセットアップします。

それから、”go”というツールセットが使用できるようになります。goツールは、PHPのCLIツールを使うのと同じくらい簡単です。“The Go Tool”に使い方が説明されています。

PHPの神話

プログラミング言語を学んだり使ったりするのが簡単なら、私達はそれを学んだり使ったりするでしょうか?
プログラミング言語の多くは、学ぶのが簡単で使うのも簡単です。私達はそれらの全てを学んだり使ったりするでしょうか?正直言うとそれは、NO!です。

しかし、PHPerがなぜGo言語を学ぶべきか?それはクールだから!いや、冗談だけど、本当です。とにかく、まずPHP自身について話しましょう。

PHPは、”もともと動的なWebページを生成するWeb開発用に設計された汎用のサーバサイドスクリプト言語(Wikipedia)”です。
PHPの最も重要な特徴は、HTMLに埋め込んでいるということです。PHPコードは“”タグで下記、HTMLは外側に書きます。また強力な拡張システムも持っています。その拡張はZend APIを使ったCで書かれます。データ処理は、実際は、それらの拡張が処理しています。
私見では、PHPはベストなテンプレートプログラミング言語に違いありません。

しかし、PHPを数年経験し、いくつかの複雑なWebアプリケーションに出会ったなら、PHPへの物足りなさを感じるに違いありません。それは、並行機能(スレッド、マルチプロセス)が備わっていないからです。低速なデータの処理するコードは、ページ全体の処理がブロックされるでしょう。PHPの前に強力Webサーバがいつも必要になってきます。バックエンドのプログラムはデータ(メッセージ・キューやキャッシュ、プロキシ・・・)を処理するために書かれます。このシステムはPHPにだけに限りませんし、多くのサービスやシステムコンポーネントもそうです。今日、PHPは少しのロジカルな処理があるテンプレート言語になっています。

PHPerは、いつも“PHP マルチスレッド”concurrent RPC framework for PHPのようなソリューションを探しています。私はどれがいいか答えることが出来ませんでした。しかし、
バックエンドジョブに対しては、他のプログラミング言語を選ばないといけないと思います。私の場合、C、Java、Pythonで試しました。Cはメモリの確保と解放との戦いで、Javaはjar地獄につまづき、PythonはPythonicになれないけど、型が失われます。パフォーマンスを得るなら、メモリ管理と向き合わなければなりません。GCを使うなら、分散やVMチューニングが必要です。便利さを重視するなら、慎重にならないと自滅する可能性があります。それぞれ長所がありますが、問題もあります。

さて、Go言語に戻りましょう。

Go言語にはGCがあります。メモリ管理を気にする必要がありません(メモリ管理にあまり気を配らなくてよくなります)。ソースコードはネイティブマシン語にコンパイルされます。
それで、”cp”や”mv”コマンドはGo言語で書かれたアプリケーションを開発するために必要です。
言ったように、Go言語は静的型付けなコンパイル言語です。変数の型に惑わされることはありません。もちろん、もっとも重要なことは、Go言語へ移行するPHPerが、多くの表現を捨てなければならないということはなく、パフォーマンスを得て、並列に実行することができるようになりということです“Why Not Go?”はこれについて深く語られています。

私自身の経験の部分をお話します。Gearman workerというのはバックエンドデータの処理をしてくれます。
PHPはGearman APIを使ってGeaman Job Serverを通してそのworkerとつながっています。
オリジナルのworkerはpythonで書かれていました。
そのバージョンでは問題がたくさんありました(それらの問題は自分たち自身の問題でしたが、pythonの問題もありました。)
しかし、それは動きます。
それから、私達は、workerをGo言語で書きなおしました。驚きでした。Go言語とGo言語でPHPスクリプトを評価するためのZend API(cgoは別に驚いたこと)を使用しているGo言語パッケージ用にGeamarn APIを書きました。
それから、それらを一緒に合わせました。つまり、PHPスクリプトが実行可能なGearman workerとなります。
我々に環境で約3ヶ月動いており、いい感じです。
私はまた、PHPスクリプト内でRPCコールを結合するためのRPC-コンビネータを書きました。
それは次のプロダクトで使う予定です。

全てのことが順調です。ありがとう、Go言語!

いずれの場合でも、ほとんどのPHPerは、バックエンド開発のためには他の言語を学ぶ必要が常にあります。
もしあなたが他の言語を探していたり、すでに経験しているなら、Go言語に挑戦してはみてはいかがですか?
あなたの人生をハッピーに楽にしてくるでしょう。多くの時間を家族や友達と過ごすことができ、好きな物を食べ、好き場所を訪れることが出来るようになります。

これこそが、PHPerがGo言語を学ぶべき理由です。私はそう思います。

これは英語を書く練習です。もし文法やスペルミスを見つけたら、連絡ください。

  • このエントリーをはてなブックマークに追加
  • LinkedIn
  • Tumblr
  • Reddit
  • Google+
  • Pinterest
  • Pocket