java?ruby? そろそろgoで行ってみませんか?
TRANSCRIPT
Java?Ruby? そろそろGoで行ってみませんか?
http://qiita.com/hoshi-k
公開版資料
2015年12月31日
紅白歌合戦が 郷ひろみさんの
「2億4千万の瞳」で開幕
某ポータルを慣れ親しんだ Railsで作るのもなーと思いつつ、 素敵な言語を探している自分
❝この星の片隅2億の瞳が 素敵な事件(こと)を探してるのさ”
という歌声が流れる中
そして、ゆく年くる年を見ながら、 やっぱりRailsで作るほうがいいかー
と思っているとき
除夜の鐘が鳴り響く
GoooooN
そういや、郷ひろみさんも 「Go!Go!(Goで行け)」 って、言ってた!!
Goで書けというお告げ がキタ━━(゚∀゚)━━!!
2015年12月31日23:50
Go言語採用決定そして、徹夜する
Go言語とは2009年にGoogleにより発表 2012年にv1.0リリース 2015年にv1.5リリース(最新版) CやC++などが使用される領域で,より効率良く実装することを目的に作られた
Golangのマスコット Gopher君
Go言語の特徴(Official)
シンプルな言語である。 コンパイル・実行速度が早い。 安全性が高い。 同期処理が容易に行える。 なにより楽しい。 オープンソースである。
C言語 < Go < Python 動的型付言語のように実装できる静的型付言語 型推論が可能 ガベージコレクタによりメモリ管理は不要 メモリ管理が必要なC言語に近いパフォーマンス 依存性管理を重視したパッケージ機構 マルチコンパイルが可能&1バイナリでデプロイ コンパイル処理時間の短縮を重視 並列処理機構を重視
Go言語の特徴(by hoshi)
Docker Go言語で実装されたミドルウェアの代表例 Cloud Foundry 性能要件の厳しいPaaSソフトウェアもGo IronWorker(iron.io) Railsから移行して、30台のサーバを2台へ Drone(drone.io) docker利用のCIサーバもGo Gunosy 日本の代表的なキュレーションメディアもGo Ameba Ownd サイバーエージェントもGoでいくつもサービス提供中
Go言語 採用事例
1/1より開発中の某ポータルより
採用アーキテクチャ、開発環境
開発言語 Go、HTML5/CSS3/JavaScript
Webフレームワーク Gin Web Framework
ORマッパー GORM
データベース sqlite3
全文検索、形態素解析 sqlite3 fts4、kagome
開発環境 SublimeText3、GoSublime、goemon goimports
エンタープライズ的にいうところの 単票参照画面のビジネスロジックは・・・
//GET/posts/:idfuncPostShow(c*gin.Context){ tx:=BeginTran() defertx.Commit()
var( postPost categoryCategory tags[]Tag ) tx.First(&post,c.Param("id")) tx.Model(&post).Related(&category,"Category") post.Category=category tx.Model(&post).Related(&tags,"Tags") post.Tags=tags
RenderHTML(c,http.StatusOK,"show_post",gin.H{ "post":&post, })}
Java Ruby Go生産性 △ ◎ ◯
開発者調達容易性 ◎ △ ✕コーディングスタイルの
統一容易性 ◎ △ ◯WEBフレームワークの
充実度 ◎ ◎ ◯非同期・バッチなど、分散処理の実装容易性 △ ◯ ◎
実行速度 ◯ △ ◎コンパイル速度 ✕ ◯ ◎
サーバリソース消費 △ ✕ ◎楽しさ(主観) ✕ △ ◯
エンタープライズ観点であえて比較してみる
Java7以前 Java8
Scala
Ruby
Go
Elixir
プログラミング言語の移行パターン
分散処理に強く、可用性が高く、 リアルタイム処理が得意な言語がトレンド
2016年初頭の結論基幹系Webシステムの開発言語としては厳しい 経験者調達はRubyよりもさらに困難 Webフレームワークは群雄割拠でスタンダートが存在しない 組み込みのテンプレートエンジンは癖が強く機能不足 いわゆるORマッパーはシンプルなものしか存在しない
ミドル、バッチ・APIサーバの開発言語としては優秀 クライアントサイドMVCと組み合わせ、これまでのノウハウをフレームワーク化することで、数億円規模の案件では投入可能性あり 分散処理の実装容易性により、これまでのバッチ処理を非常に少ないリソースで高負荷でもリアルに処理することができる クラウドにおけるミドルウェアとして、社内共通基盤で採用予定
というわけで、 2016年は
Goで行きます!!目指せ!エキゾチックフューチャー
fin.No Programming, No Life