java?ruby? そろそろgoで行ってみませんか?

24
Java Ruby そろそろ Go で行ってみませんか? http://qiita.com/hoshi-k 公開版資料

Upload: kenichi-hoshi

Post on 21-Feb-2017

1.605 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Java?ruby? そろそろgoで行ってみませんか?

Java?Ruby? そろそろGoで行ってみませんか?

http://qiita.com/hoshi-k

公開版資料

Page 2: Java?ruby? そろそろgoで行ってみませんか?

2015年12月31日

Page 3: Java?ruby? そろそろgoで行ってみませんか?

紅白歌合戦が 郷ひろみさんの

「2億4千万の瞳」で開幕

Page 4: Java?ruby? そろそろgoで行ってみませんか?

某ポータルを慣れ親しんだ Railsで作るのもなーと思いつつ、 素敵な言語を探している自分

❝この星の片隅2億の瞳が 素敵な事件(こと)を探してるのさ”

という歌声が流れる中

Page 5: Java?ruby? そろそろgoで行ってみませんか?

そして、ゆく年くる年を見ながら、 やっぱりRailsで作るほうがいいかー

と思っているとき

Page 6: Java?ruby? そろそろgoで行ってみませんか?

除夜の鐘が鳴り響く

GoooooN

Page 7: Java?ruby? そろそろgoで行ってみませんか?

そういや、郷ひろみさんも 「Go!Go!(Goで行け)」 って、言ってた!!

Page 8: Java?ruby? そろそろgoで行ってみませんか?

Goで書けというお告げ がキタ━━(゚∀゚)━━!!

Page 9: Java?ruby? そろそろgoで行ってみませんか?

2015年12月31日23:50

Go言語採用決定そして、徹夜する

Page 10: Java?ruby? そろそろgoで行ってみませんか?

Go言語とは2009年にGoogleにより発表 2012年にv1.0リリース 2015年にv1.5リリース(最新版) CやC++などが使用される領域で,より効率良く実装することを目的に作られた

Golangのマスコット Gopher君

Page 11: Java?ruby? そろそろgoで行ってみませんか?

Go言語の特徴(Official)

シンプルな言語である。 コンパイル・実行速度が早い。 安全性が高い。 同期処理が容易に行える。 なにより楽しい。 オープンソースである。

Page 12: Java?ruby? そろそろgoで行ってみませんか?

C言語 < Go < Python 動的型付言語のように実装できる静的型付言語 型推論が可能 ガベージコレクタによりメモリ管理は不要 メモリ管理が必要なC言語に近いパフォーマンス 依存性管理を重視したパッケージ機構 マルチコンパイルが可能&1バイナリでデプロイ コンパイル処理時間の短縮を重視 並列処理機構を重視

Go言語の特徴(by hoshi)

Page 13: Java?ruby? そろそろgoで行ってみませんか?

Docker Go言語で実装されたミドルウェアの代表例 Cloud Foundry 性能要件の厳しいPaaSソフトウェアもGo IronWorker(iron.io) Railsから移行して、30台のサーバを2台へ Drone(drone.io) docker利用のCIサーバもGo Gunosy 日本の代表的なキュレーションメディアもGo Ameba Ownd サイバーエージェントもGoでいくつもサービス提供中

Go言語 採用事例

Page 14: Java?ruby? そろそろgoで行ってみませんか?

1/1より開発中の某ポータルより

Page 15: Java?ruby? そろそろgoで行ってみませんか?

採用アーキテクチャ、開発環境

開発言語 Go、HTML5/CSS3/JavaScript

Webフレームワーク Gin Web Framework

ORマッパー GORM

データベース sqlite3

全文検索、形態素解析 sqlite3 fts4、kagome

開発環境 SublimeText3、GoSublime、goemon goimports

Page 16: Java?ruby? そろそろgoで行ってみませんか?

エンタープライズ的にいうところの 単票参照画面のビジネスロジックは・・・

Page 17: Java?ruby? そろそろgoで行ってみませんか?

//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, })}

Page 18: Java?ruby? そろそろgoで行ってみませんか?

Java Ruby Go生産性 △ ◎ ◯

開発者調達容易性 ◎ △ ✕コーディングスタイルの

統一容易性 ◎ △ ◯WEBフレームワークの

充実度 ◎ ◎ ◯非同期・バッチなど、分散処理の実装容易性 △ ◯ ◎

実行速度 ◯ △ ◎コンパイル速度 ✕ ◯ ◎

サーバリソース消費 △ ✕ ◎楽しさ(主観) ✕ △ ◯

エンタープライズ観点であえて比較してみる

Page 19: Java?ruby? そろそろgoで行ってみませんか?

Java7以前 Java8

Scala

Ruby

Go

Elixir

プログラミング言語の移行パターン

分散処理に強く、可用性が高く、 リアルタイム処理が得意な言語がトレンド

Page 20: Java?ruby? そろそろgoで行ってみませんか?

2016年初頭の結論基幹系Webシステムの開発言語としては厳しい 経験者調達はRubyよりもさらに困難 Webフレームワークは群雄割拠でスタンダートが存在しない 組み込みのテンプレートエンジンは癖が強く機能不足 いわゆるORマッパーはシンプルなものしか存在しない

ミドル、バッチ・APIサーバの開発言語としては優秀 クライアントサイドMVCと組み合わせ、これまでのノウハウをフレームワーク化することで、数億円規模の案件では投入可能性あり 分散処理の実装容易性により、これまでのバッチ処理を非常に少ないリソースで高負荷でもリアルに処理することができる クラウドにおけるミドルウェアとして、社内共通基盤で採用予定

Page 21: Java?ruby? そろそろgoで行ってみませんか?

というわけで、 2016年は

Page 22: Java?ruby? そろそろgoで行ってみませんか?

Goで行きます!!目指せ!エキゾチックフューチャー

Page 23: Java?ruby? そろそろgoで行ってみませんか?
Page 24: Java?ruby? そろそろgoで行ってみませんか?

fin.No Programming, No Life