LastaFlute in Seasar Conference
SSeeaassaarrで育ったDDBBFFlluuttee,, スタートアップ現場でのJJaavvaa88とSSeeaassaarrを思う~~LastaFluteの誕生~~久保雅彦(jjfflluuttee)
View Slide
もくじLL.. SSeeaassaarrとDDBBFFlluutteeの関係AA.. リーンスタートアップ・ インクリメンタル開発の特徴SS.. 事業会社でのSSeeaassaarrの価値TT.. JJaavvaa88でSSeeaassaarrを動かすには?AA.. LLaassttaaFFlluutteeの誕生2
SSeeaassaarrとDDBBFFlluutteeの関係LLAASSTTAA SSeeaassaarrとDDBBFFlluutteeの関係
DDBBFFlluutteeって、SSeeaassaarrプロジェクトだっけ?4LLAASSTTAA SSeeaassaarrとDDBBFFlluutteeの関係
独立しました11..00..xx:: JJaavvaa66,,77 SSeeaassaarrプロジェクト ⾣ oorrgg..sseeaassaarr..ddbbfflluuttee 11..11..xx:: JJaavvaa88 DDBBFFlluutteeプロジェクト ⾣ oorrgg..ddbbfflluuttee5LLAASSTTAA SSeeaassaarrとDDBBFFlluutteeの関係
DDBBFFlluutteeって、SSeeaassaarrでしか動かないんだっけ?6LLAASSTTAA SSeeaassaarrとDDBBFFlluutteeの関係
色々動くSSeeaassaarrでも動くけど、 SSpprriinngg FFrraammeewwoorrkkや GGooooggllee GGuuiicceeなどでも動く特にSSpprriinngg++DDBBFFlluutteeの現場が増えている そもそも..NNEETT版もあるし、 最近SSccaallaa((パイロット版))でも動く7LLAASSTTAA SSeeaassaarrとDDBBFFlluutteeの関係
最近は…最近は、スタートアップ現場での活躍が 増えている。 要求の変化や、仮説検証の過程で 発生するDDBB変更、これに耐えられる フレームワークとして、さらなる調整を 続けている。8LLAASSTTAA SSeeaassaarrとDDBBFFlluutteeの関係
リーンスタートアップ・ インクリメンタル開発の特徴9LLAASSTTAA リーンスタートアップ・インクリメンタル開発の特徴
!!注意!! ※あくまでjjfflluutteeの経験や現場へのヒアリングを、 限りある時間で分析したものです。10LLAASSTTAA リーンスタートアップ・インクリメンタル開発の特徴
事前条件たらたらと......所詮はケースバイケースで、 SSIIといってもスタートアップっぽい開発もあるし、事業会社でお堅い感じにやることもありえるので…「どちらかといえば」というニュアンス。厳密には......の話をしたら二時間くらいかかるので、((すっごい))シンプルに表現しています。11LLAASSTTAA リーンスタートアップ・インクリメンタル開発の特徴
スタートアップのライフサイクルLLAASSTTAA リーンスタートアップ・インクリメンタル開発の特徴
スタートアップのライフサイクル※ファーストリリースは、導入�期の早い段階※メンテ期まで数年((22--55年,,nn年))とかかる※生き残りなので途中ストップの可能性※衰退期前に次のビジネスをスタートアップLLAASSTTAA リーンスタートアップ・インクリメンタル開発の特徴
11..ビジネス14SSII ((受注))頼まれたものを作ることで お金が入�るバグは損失に直結 ((瑕疵担保、信頼))バグの致命度に関わらず損失になりやすいスタートアップ自分たちのビジネスが成功することでお金が入�るバグよりもスピードが大切 ((生き残り:: マーケットフィット))致命的でなければ直さない選択肢もあり((バグのビジネスインパクトの見極めが大切)) LLAASSTTAA リーンスタートアップ・インクリメンタル開発の特徴
22..リリースタイミング15SSII ((受注))ファーストリリースでわりとたくさん作るそれでおしまいのこともよくある二次三次開発もそれなりのスパンがあるスタートアップファーストリリースはわりとシンプルで期間短いその後、毎週リリース ((最初は毎日!!??))LLAASSTTAA リーンスタートアップ・インクリメンタル開発の特徴
33..バグの直しやすさ16SSII ((受注))リリース後は直しづらい ((面倒な手続き、客先作業など)ちょっとしたバグでも手間がかかるバグ修正がお金にならないことも ((瑕疵担保)) ==>> なので、最初からよい品質が求められるスタートアップリリース後でも直しやすい ☆これ大きい自分たちのシステム、自分たちの都合で再起動そもそも、最初は使ってる人がまだ少なかったり ==>> バグ0よりも、速くビジネスを回したい ((超致命でなきゃ、今は直さないという選択肢も))LLAASSTTAA リーンスタートアップ・インクリメンタル開発の特徴
44..作る画面の必要性17SSII ((受注))作る画面は業務的に必要なものである ((ことが前提))時々そうでもなくて泣くときあるけど…なので、コード品質に時間をかけてもOOKK ((時間ないけど......))スタートアップその画面が必要がかどうか、まだわからない運用してみてダメだったら捨てることもあとでガラリと変えるのは日常茶飯事なので、コード品質に時間をかけづらいLLAASSTTAA リーンスタートアップ・インクリメンタル開発の特徴
55..画面作りの進み方18SSII ((受注))その画面を作り切ってから、次の画面へ必要だとわかっている機能は一気に作る細切れに作業するとテストし直しコストや抜けのリスクができるスタートアップその画面の一部機能だけ作って、すぐ次の画面へある意味、一部機能だらけの画面たちで リリース((ジャブ、ローキックのようなもの))次の ((oorr もっと先の)) リリースでその続きLLAASSTTAA リーンスタートアップ・インクリメンタル開発の特徴
66..DDBB変更しまくる19SSII ((受注))運用後のDDBB変更はおおごとできるだけ「やらない」って方向�に…スタートアップ運用してからのDDBB変更は 息を吸うかのごとく毎週のようにDDBB変更 ((DDBB変更したい))データもプログラムもどんどん修正LLAASSTTAA リーンスタートアップ・インクリメンタル開発の特徴
77..ドキュメント20SSII ((受注))ドキュメント作るの基本メンテナンスする会社が別かもしれない ((お客さんとか))ドキュメント自体がお金になることもある ((納品物に含まれてる))スタートアップまずドキュメントは作らないドキュメント作ってもお金にならないドキュメントが変化についていけないので作れない((いつかは作らないといけないけど......のジレンマ))LLAASSTTAA リーンスタートアップ・インクリメンタル開発の特徴
88..人員・規模21SSII ((受注))最初から人員の確保 ((しようとする))ある程度の規模感はあらかじめわかっている ((はずだが…))人員確保できなかったら、その仕事断ることも ((れないことも......))スタートアップ最初めちゃ少なく、五月雨増加サービスの成長速度にプログラマーの数が追いついかない入�ってきても「いい感じで頼む!」ゆえに、コードの統一性を保つのは難しい 少人数のときと大人数のときの激ギャップLLAASSTTAA リーンスタートアップ・インクリメンタル開発の特徴
99..コーディングルール22SSII ((受注))ルールを守ることが大切メンテナンス別会社になるかもしれないしあとでリファクタリングとかしづらいし規模がある程度わかっているので、ルールも作りやすいスタートアップルールは流行らない最初は人が少ないのでそもそもルールがないそもそも作るものや体制が変動的なのでルール決めが難しい★これでかいルールを守るという精神状態でもない ((動くことが最優先))LLAASSTTAA リーンスタートアップ・インクリメンタル開発の特徴
1100..役割分担23SSII ((受注))要件定義、DDBB設計、仕様策定、プログラミングと人が分かれやすいはずだが…いろいろあるけど実装時点で仕様も決まっていることが多い ((はずだが......))スタートアップひとりの人が一通りやる、少なくとも一つに専念はほぼないそもそも人が少ない ((エンジニアばかりじゃない))ある意味「仕様が決まってない中での実装」に実装しながら決める((仕様という言葉がない))LLAASSTTAA リーンスタートアップ・インクリメンタル開発の特徴
その他、スタートアップあるある24作業時間作る量のわりには期限が短い((生き残れるかどうかが見積もり基準))状況によっては、作業時間は深夜//土日 ((別の仕事しながらスタートアップも))プログラミングスキル役割分担できない分、ひとりに求められるスキルが多岐にわたる技術だけに専念できない ((プログラマーもビジネスに参加))不安定な仕事なので、((優秀で成長著しいとはいえ…))発展途上の若者が多い精神状態とにかく速く作らなきゃめちゃくちゃ眠いLLAASSTTAA リーンスタートアップ・インクリメンタル開発の特徴
アーキテクチャは変わるくどいようですが「所詮はケースバイケース」ですが、大切なポイントは… 作るものが違えば 「大切にすることも変わってくる」それってつまり、 「アーキテクチャも変わってくる」25LLAASSTTAA リーンスタートアップ・インクリメンタル開発の特徴
ずばり!スタートアップは…TTrriiaall && EErrrroorr の繰り返し既存コードを読む時間が長い! 要求の変化が激しい!画面は変わるし、DDBB変更しまくり みんなであれこれ、 サバイバルコードだらけ人は次々と変わるし、ルール作りは難しいし26LLAASSTTAA リーンスタートアップ・インクリメンタル開発の特徴
だから欲しいもの身軽な開発環境 ((ホットデプロイ,, 起動の速さ))デバッグのための TTrriiaall && EErrrroorr既存コード解析のための TTrriiaall && EErrrroorr ☆意外に重要再起動が必要にしても、起動が速ければいい再起動で何十秒も待つとかそういう精神状態じゃない((深夜土日にやっているときは特に)) 安全な仕組みタイプセーフ、DDBB変更への耐性現象を追跡できるしっかりとしたログ 規約ベース途中参加の人を入�れてルール無しでもわりと統一感が欲しい実装する人がガラリと入�れ替わってもわりと統一感が欲しいその後の大規模化を見越して、そういった仕組み最初から欲しい27LLAASSTTAA リーンスタートアップ・インクリメンタル開発の特徴
あるよ!SSeeaassaarrが結構持ってる28LLAASSTTAA リーンスタートアップ・インクリメンタル開発の特徴
事業会社でのSSeeaassaarrの価値29LLAASSTTAA 事業会社でのSSeeaassaarrの価値
マッチするじゃん!スタートアップをやる事業会社で欲しいものが、SSeeaassaarrの特徴とマッチする。ホットデプロイDDIIレベルでリロードしてくれる「使い方さえ間違えなければ」かなり効く 起動の速さ起動が速いというより、開発時はホットだからLLaazzyyLLooaaddスマートデプロイのコンポーネント増えても、そこまで遅くならない ((220000テーブル超えのアプリでも1100秒切り)) SSAASSttrruuttssが規約ベースNNoo RRuullee でも、AAccttiioonnクラスは綺麗にそろう30LLAASSTTAA 事業会社でのSSeeaassaarrの価値
そしてヒアリング!SSeeaassaarrを使ったスタートアップの開発者のみなさんに聞いてみると… ((厳密には、SSAAFFlluuttee ++ DDBBFFlluuttee))何気に、SSeeaassaarrに対しての不満の声はそんなに聞こえない。もちろん細かいところはあるけれど、 他のフレームワークにしたい、とまではならない ((ただ、古いからという機能以外の面で不安あり)) ※SSIIだと真逆になる印象。 ((さっきのSSeeaassaarrの特徴が刺さらない)) また事業会社でも超大規模フェーズなら話は別31LLAASSTTAA 事業会社でのSSeeaassaarrの価値
だかしかしおかし32LLAASSTTAA 事業会社でのSSeeaassaarrの価値
JJaavvaa88とSSeeaassaarr33LLAASSTTAA JJaavvaa88とSSeeaassaarr
時代はJJaavvaa88JJaavvaa88で使えなかったら 意味がないというか、JJaavvaa99も来年!!??34LLAASSTTAA JJaavvaa88とSSeeaassaarr
JJaavvaa88とSSeeaassaarrJJaavvaa88でもSSeeaassaarr使えます JJaavvaassssiissttを最新版にすればOOKK 実際に、 SSeeaassaarr ++ DDBBFFlluuttee の JJaavvaa88 版 のサービスを幾つか知ってます。 ((厳密には、SSAAFFlluuttee++DDBBFFlluuttee ですが......)) 安定して動いています。35LLAASSTTAA JJaavvaa88とSSeeaassaarr
だかしかしおかし36LLAASSTTAA JJaavvaa88とSSeeaassaarr
LLaassttaaFFlluutteeの誕生37LLAASSTTAA LLaassttaaFFlluutteeの誕生
古いというイメージやっぱり「古い」が払拭できない いくら機能的にフィットする面があると言っても、スタートアップの経験者は、JJaavvaaの世界にはあまり多くない。 ((なので、先ほどのマッチ感もあまり理解されない。経験者だけがわかる)) スタートアップで重要な「人集め」に支障が出てくる。38LLAASSTTAA LLaassttaaFFlluutteeの誕生
確かに辛いところも確かに「改�善されていかない」というのは、ハマりポイントも改�善されていかないということなので、つらいことも。 ((ああ、ここ直ってくれないかなぁ......)) ((若者たちが、毎年同じことでハマる......))39LLAASSTTAA LLaassttaaFFlluutteeの誕生
もやもや40SSAAFFlluuttee ++ DDBBFFlluuttee を前面に売り出したいが、なんかそういうこともあって、もやもやしてた。LLAASSTTAA LLaassttaaFFlluutteeの誕生
そこでFFeessss登場!41FessLLAASSTTAA LLaassttaaFFlluutteeの誕生
FFeessssとは?オープンソース全文検索サーバー FFeessss ((フェス)) hhttttpp::////ffeessss..ccooddeelliibbss..oorrgg//jjaa// ※FFeessss99までは、 「SSeeaassaarr ++ SSAASSttrruuttss ++ DDBBFFlluuttee」 で作られている42LLAASSTTAA LLaassttaaFFlluutteeの誕生
ssuuggaayyaaさんと立ち話FFeessssの作者、ssuuggaayyaaさん 「SSttrruuttss11依存つらいし、今後の海外展開のためにも、FFeessss を SSeeaassaarr から SSpprriinngg に移行しようとしてるけど、なかなか道のりが険しい......jjfflluuttee「うーむー、まあ仕方ないですよねぇ...... そういえば、SSAAFFlluutteeなんてのありますよぅ笑 SSeeaassaarrもJJaavvaa88でフォークしちゃったりしてー」((完全にジョーク!))43LLAASSTTAA LLaassttaaFFlluutteeの誕生
ぼくはDDBB屋さんです、はいjjfflluutteeは、いつも通り、 リレーショナルデータベースのお風呂につかりながら...... 「いやー、やっぱり画面はなくていいよー会員登録とか、会員にiinnsseerrtt文書かせりゃいいじゃん!DDBBだけあればしあわせだよー、あーいいデータ((湯))だなー」 ※ほんの少しだけ、デフォルメしております44LLAASSTTAA LLaassttaaFFlluutteeの誕生
メールチェック((ほかほか......)) 「ふー、RRDDBBのハーブティーでも 飲みながら、メール見るかー」 ※ほんのわずかだけ、デフォルメしております45LLAASSTTAA LLaassttaaFFlluutteeの誕生
いつ頃って何語?ssuuggaayyaaさん 「SSeeaassaarr//SSAASSttrruuttssを JJaavvaa88フォークしたSSAAFFlluuttee、 いつ頃 作ります? FFeessss そっちにしようかと」46LLAASSTTAA LLaassttaaFFlluutteeの誕生
そのあのことばあっ、いや… あの、そのあの。。。47LLAASSTTAA LLaassttaaFFlluutteeの誕生
言っちゃったjjfflluuttee 「い、いまから作りますよー」48LLAASSTTAA LLaassttaaFFlluutteeの誕生
井戸端会議jjfflluuttee「こんなことやることになってさー、ハッハッハ」 友人AA ((@@pp11uuss22eerr00:: aawwaaaawwaa)) 「ああ、じゃあ来月から始まるサービス開発で 使いますよー。いつ頃初版でます?」友人BB ((@@CCrreeaattiivvee__GGeeaarr:: mmiiyyaassaammaa)) 「いま運用してるサービス、 それに移行しますね。いつ頃使えます?」jjfflluuttee「ふげー(><」49LLAASSTTAA LLaassttaaFFlluutteeの誕生
深夜に盛り上がるSSllaacckk…土日が来たぞ、がっつり実装だ!50リーン・スタートアップだ!LLAASSTTAA LLaassttaaFFlluutteeの誕生
じゃーんLLaassttaaFFlluuttee || GGiitthhuubb hhttttppss::////ggiitthhuubb..ccoomm//llaassttaafflluuttee//llaassttaafflluuttee LLaassttaaFFlluuttee日本語ページ ((英語のページも少しずつ)) hhttttpp::////ddbbfflluuttee..sseeaassaarr..oorrgg//jjaa//llaassttaafflluuttee//51LLAASSTTAA LLaassttaaFFlluutteeの誕生
三つの特徴、その一リズム&スピードプログラミング スタートアップは、Trial & Error の繰り返しのため、 身軽な開発環境が求められる。 ホットデプロイ:再起動せずに、AAccttiioonnクラスを 修正してすぐに確認できる起動が速い:再起動が必要になっても、ハイスピードの再起動 思考のリズムを止めない!は、スピード になる52LLAASSTTAA LLaassttaaFFlluutteeの誕生
三つの特徴、その二53変化できるプログラミングスタートアップは、要求の変化 の繰り返しのため、安全な仕組みが求められる。 徹底したタイプセーフ:タイプセーフなAAccttiioonn実装、 そして、CCoonnddiittiioonnBBeeaann 攻めのDDBB変更:DDBBFFlluutteeフルパワー、 そして、 FFrreeeeGGeenn化け物のようなログ:困ったときに 見たくなるようなログ† 安全!は、スピード になるLLAASSTTAA LLaassttaaFFlluutteeの誕生
三つの特徴、その三54自然とそうなるプログラミングスタートアップは、人的リソースも変化 の繰り返しのため、自然の力が求められる。規約ベースAAccttiioonn:UURRLL == クラス名 ++ メソッド名 UURRLLからクラスが探しやすい少ない選択肢:不要な選択肢を省き、 できる限り実装のブレを少なくデフォルトセット:一通り揃っている開発環境、 コンフィグの仕組みからメールまで† 迷わない!は、スピード になるLLAASSTTAA LLaassttaaFFlluutteeの誕生
LLaassttaaFFlluutteeのキャスト55LLAASSTTAA LLaassttaaFFlluutteeの誕生
JJaavvaaならではのコンパイルセーフを最大限活かした、 リーン・スタートアップに チャレンジしてみたい56LLAASSTTAA LLaassttaaFFlluutteeの誕生
SSeeaassaarr を JJaavvaa88 でフォーク57徹底したスリム化使わない機能削減、依存ライブラリ削減 ((依存jjaarrを少なくシンプルに))デバックしやすいようにコンテナ内で発生したエラーメッセージをDDBBFFlluuttee風に ((いわゆるド派手エラー))OOGGNNLL改�めJJSS OOGGNNLLの代わりにJJaavvaa同梱のNNaasshhoorrnnのJJaavvaaSSccrriippttエンジンを利用ホットデプロイはそのまま欠かせないホットデプロイは変わらず利用できるようにLLAASSTTAA LLaassttaaFFlluutteeの誕生
SSAASSttrruuttss を JJaavvaa88 でフォーク58SSttrruuttss11外し 一番のネックだった SSttrruuttss11 への依存のない SSAASSttrruuttss をccoommmmoonnssへの依存最小限古いccoommmmoonnssへの依存を外し、アプリで最新版使えるように内部フォワードしない フォワードせずとも綺麗なUURRLLを実現設定ファイル削減定型化された設定を組み込んで、アプリで管理する設定をシンプルにシンプルなコードRReeqquueessttからAAccttiioonnが呼ばれるまでの道のりできるだけシンプルにHHiibbeerrnnaattee VVaalliiddaattoorr バリデーションにHHiibbeerrnnaattee VVaalliiddaattoorr を使う規約ベースはそのまま欠かせない規約ベースUURRLLマッピングは変わらず利用できるようにLLAASSTTAA LLaassttaaFFlluutteeの誕生
LLaassttaaFFlluutteeのコードSSeeaaLLiissttAAccttiioonn :: //sseeaa//lliisstt//33??iikkss==bboonnvvoo 59 @@EExxeeccuuttee ppuubblliicc HHttmmllRReessppoonnssee iinnddeexx((iinntt ppaaggeeNNuummbbeerr,, SSeeaaSSeeaarrcchhFFoorrmm ffoorrmm)) {{ vvaalliiddaattee((ffoorrmm,, mmeessssaaggeess -->> {{}},, (()) -->> {{ rreettuurrnn aassHHttmmll((ppaatthh__SSeeaa__SSeeaaLLiissttJJsspp));; }}));; PPaaggiinnggRReessuullttBBeeaann<> sseeaaLLiisstt == sseeaaBBhhvv..sseelleeccttPPaaggee((ccbb -->> ......));; LLiisstt<> bbeeaannss == sseeaaLLiisstt..mmaappppiinnggLLiisstt((sseeaa -->> ......));; rreettuurrnn aassHHttmmll((ppaatthh__SSeeaa__SSeeaaLLiissttJJsspp))..rreennddeerrWWiitthh((ddaattaa -->> {{ ddaattaa..rreeggiisstteerr((""bbeeaannss"",, bbeeaannss));; }}));; }}LLAASSTTAA LLaassttaaFFlluutteeの誕生
LLaassttaaFFlluutteeのUURRLLマッピングAAccttiioonnクラス名 ++ EExxeeccuutteeメソッド名60 SSeeaaLLaannddAAccttiioonn##iinnddeexx(()) ==>> //sseeaa//llaanndd// IIkkssAAccttiioonn##bboonnvvoo(()) ==>> //iikkss//bboonnvvoo//LLAASSTTAA LLaassttaaFFlluutteeの誕生
UURRLLパラメータ、FFoorrmmパラメータの定義61//// //sseeaa//llaanndd// ((GGEETT oorr PPOOSSTT))SSeeaaLLaannddAAccttiioonn##iinnddeexx((BBoonnvvooFFoorrmm ffoorrmm))//// //sseeaa//llaanndd//33 ((GGEETT oorr PPOOSSTT))SSeeaaLLaannddAAccttiioonn##iinnddeexx((iinntt iikkss,, BBoonnvvooFFoorrmm ffoorrmm))LLAASSTTAA LLaassttaaFFlluutteeの誕生
戻りレスポンスHHTTMMLLテンプレートのパスは自動生成 ランドに移動 ((リダイレクト先は ..ccllaassssで指定)) JJSSOONNで戻す ((JJSSOONN AAPPII方式:: bbeeaannを渡せばJJSSOONNに)) 62rreettuurrnn aassHHttmmll((ppaatthh__SSeeaa__SSeeaaLLiissttJJsspp))..rreennddeerrWWiitthh((ddaattaa -->> {{ ddaattaa..rreeggiisstteerr((""bbeeaannss"",, bbeeaannss));; }}));;rreettuurrnn rreeddiirreeccttBByyIIdd((LLaannddAAccttiioonn..ccllaassss,, 33));; //// //llaanndd//33rreettuurrnn aassJJssoonn((bbeeaann));;LLAASSTTAA LLaassttaaFFlluutteeの誕生
AAccttiioonnのポイント徹底してタイプセーフに 要は DDBBFFlluuttee っぽくSSAASSttrruuttssでよくハマってたとこ修正IInnddeexxだらけ問題を回避 ((クラス名検索をしやすいように))リダイレクト//フォワード先コードにすぐにJJuummpp!最小公倍数FFoorrmm//ppuubblliiccフィールドなし…などなど 「こう書いても動く」を極力やらない不要な自由度は削除 ee..gg.. 引数の順序とか、戻り値の表現とか必要な自由度は担保 ee..gg.. vvaalliiddaattoorr ccaallllタイミング、エラー処理63LLAASSTTAA LLaassttaaFFlluutteeの誕生
SSAAFFlluutteeの機能はあるそもそも、SSAAFFlluutteeでがっつりリーン・スタートアップにフィットさせていた機能たち、それらはすべて、LLaassttaaFFlluutteeで継承、かつ、さらなる改�善気軽な前後処理の仕組み ((AAccttiioonnHHooookk))タイプセーフで継承できるPPrrooppeerrttiieess国際化対応 ((LLooccaalleeやTTiimmeezzoonnee))組み込みログイン処理 …などなどそもそも SSAAFFlluuttee とは? hhttttpp::////ddbbfflluuttee..sseeaassaarr..oorrgg//jjaa//mmaannuuaall//ffuunnccttiioonn//hheellppeerr//ssaafflluuttee//64LLAASSTTAA LLaassttaaFFlluutteeの誕生
そして、いちどフォークしてしまったら......いろいろとbbeeffoorree:: ((フラットなddiiccoonn起動ログ))65 -- SS22CCoonnttaaiinneerrを作成します。ppaatthh==aapppp..ddiiccoonn -- SS22CCoonnttaaiinneerrを作成します。ppaatthh==ccoonnvveennttiioonn..ddiiccoonn -- SS22CCoonnttaaiinneerrを作成しました。ppaatthh==ccoonnvveennttiioonn..ddiiccoonn -- SS22CCoonnttaaiinneerrを作成します。ppaatthh==ssaafflluuttee..ddiiccoonn -- SS22CCoonnttaaiinneerrを作成します。ppaatthh==ssaafflluuttee__ccoorree..ddiiccoonn -- SS22CCoonnttaaiinneerrを作成します。ppaatthh==ssaafflluuttee__aassssiisstt..ddiiccoonn -- SS22CCoonnttaaiinneerrを作成しました。ppaatthh==ssaafflluuttee__aassssiisstt..ddiiccoonn -- SS22CCoonnttaaiinneerrを作成しました。ppaatthh==ssaafflluuttee__ccoorree..ddiiccoonn -- SS22CCoonnttaaiinneerrを作成します。ppaatthh==ssaafflluuttee__ddbb..ddiiccoonn -- SS22CCoonnttaaiinneerrを作成します。ppaatthh==ddbbfflluuttee..ddiiccoonn -- SS22CCoonnttaaiinneerrを作成します。ppaatthh==jj22eeee..ddiiccoonn -- ......LLAASSTTAA LLaassttaaFFlluutteeの誕生
止ーまらっなーい♪aafftteerr:: ((iinncclluuddeeの階層構造がわかるように))66 -- ......RReeaaddiinngg aapppp..xxmmll -- ......RReeaaddiinngg ccoonnvveennttiioonn..xxmmll -- ......RReeaaddiinngg eemmbbeeddddeedd__ccoonnvveennttiioonn..xxmmll -- ......RReeaaddiinngg ddbbfflluuttee..xxmmll -- ......RReeaaddiinngg rrddbb..xxmmll -- ......RReeaaddiinngg jjttaa..xxmmll -- ......RReeaaddiinngg jjttaa++uusseerrTTrraannssaaccttiioonn..xxmmll -- ......RReeaaddiinngg jjttaa++ttrraannssaaccttiioonnMMaannaaggeerr..xxmmll -- ......RReeaaddiinngg jjddbbcc..xxmmll -- ......RReeaaddiinngg jjttaa..xxmmll ((rreeccyyccllee)) -- ......RReeaaddiinngg llaassttaafflluuttee__aassssiisstt..xxmmll -- ......LLAASSTTAA LLaassttaaFFlluutteeの誕生
まだやりたいことありもっとタイプセーフにFFoorrmmやメソッド定義の自動生成など AAccttiioonnクラスから、 ドキュメントを自動生成AAccttiioonnのUURRLL一覧JJSSOONN AAPPIIのインターフェース定義書 ★フロント側とのやり取りで実は非常に重要 サーバーサイドテンプレートに TThhyymmeelleeaaff((とまあ発想だけはいくらでもある......))67LLAASSTTAA LLaassttaaFFlluutteeの誕生
すでに今日でも実績あり その一アットパーティー || 宴会・パーティー予約サイト ((株式会社リブゲート))hhttttppss::////aattppaarrttyy..jjpp// LLaassttaaFFlluuttee ++ DDBBFFlluuttee ++ aanngguullaarrJJSS※公開の許可を頂いています。 68LLAASSTTAA LLaassttaaFFlluutteeの誕生
すでに今日でも実績あり その二UU--NNEEXXTT<ユーネクスト> || 日本最大級のビデオ・オンデマンド ((株式会社UU--NNEEXXTT)) hhttttpp::////pp..uunneexxtt..jjpp//基幹サービス ((220000テーブル超え)) にて SSAAFFlluuttee++DDBBFFlluuttee を採用新規プロジェクトで LLaassttaaFFlluuttee を採用 ==>> すでに一つはローンチ済み、 ==>> もう一つ ((330000テーブル近く)) は開発中※公開の許可を頂いています。 69LLAASSTTAA LLaassttaaFFlluutteeの誕生
すでに今日でも実績あり その三CClloocckk IItt || タスク管理&タイムマネジメントサービスhhttttppss::////cclloocckk--iitt..ccoomm//SSAAFFlluutteeでスタートアップ、 すでにLLaassttaaFFlluutteeに移行 個人でのWWeebbサービスの作り方 -- SSAAFFlluutteeでスタートダッシュを決める hhttttpp::////wwwwww..sslliiddeesshhaarree..nneett//TTaakkeesshhiiKKaattoo//wweebb--ssaafflluuttee ※公開の許可を頂いています。 70LLAASSTTAA LLaassttaaFFlluutteeの誕生
すでに今日でも実績あり その四FFeessss バージョン1100 ((リリースまであともうちょい))hhttttppss::////ggiitthhuubb..ccoomm//ccooddeelliibbss//ffeessss FFeessss99 :: SSeeaassaarr ++ SSAASSttrruuttss ++ DDBBFFlluutteeFFeessss1100 :: LLaassttaa DDii ++ LLaassttaaFFlluuttee ++ EESSFFlluuttee ++ EEllaassttiiccsseeaarrcchh※公開の許可を頂いています。 71LLAASSTTAA LLaassttaaFFlluutteeの誕生
前身のSSAAFFlluutteeも実績いろいろSSAAFFlluuttee は、LLaassttaaFFlluuttee の前身となったフレームワーク。コンセプトは同じ。 ↓↓↓ SSAAFFlluutteeの実績は、 LLaassttaaのコンセプト実績 とも言える。なので、すでに紹介した 「SSAAFFlluuttee から LLaassttaa」の実績に加え......72LLAASSTTAA LLaassttaaFFlluutteeの誕生
前身のSSAAFFlluutteeも実績いろいろニクリーチ || お腹を空かせた学生のための、 肉食就活サイト ((株式会社ビズリーチ))hhttttppss::////2299rreeaacchh..ccoomm// ※厳密には、SSAAFFlluutteeをベースにさらに カスタマイズ※公開の許可を頂いています。73LLAASSTTAA LLaassttaaFFlluutteeの誕生
前身のSSAAFFlluutteeも実績いろいろzzuukknnooww((ズノウ)) || 友達とクイズで競える学習アプリ ((株式会社ビズリーチ))hhttttppss::////wwwwww..zzuukknnooww..nneett// RReeggiioonnUUpp || SSeeaarrcchh SSiinnggaappoorree JJoobbss--HHoonngg KKoonngg jjoobbss ((株式会社ビズリーチ))hhttttppss::////wwwwww..rreeggiioonnuupp..ccoomm//※どの現場からも非常に高い評判を頂いています※公開の許可を頂いています。74LLAASSTTAA LLaassttaaFFlluutteeの誕生
前身のSSAAFFlluutteeも実績いろいろLLUUXXAA RREESSEERRVVEE || 会員制レストラン予約サイト ((株式会社ルクサ))hhttttpp::////rreesseerrvvee..lluuxxaa..jjpp// ※公開の許可を頂いています。75LLAASSTTAA LLaassttaaFFlluutteeの誕生
LLaassttaa DDii だけでも、すでに実績EEllaassttiiccsseeaarrcchh RRiivveerr WWeebb hhttttppss::////ggiitthhuubb..ccoomm//ccooddeelliibbss//eellaassttiiccsseeaarrcchh--rriivveerr--wweebb SS22RRoobboott hhttttppss::////ggiitthhuubb..ccoomm//ccooddeelliibbss//ss22rroobboott※LLaassttaa DDii は、DDBBFFlluutteeにも依存していないので、 単独で使うことができます。76LLAASSTTAA LLaassttaaFFlluutteeの誕生
余談ですが......EESSFFlluuttee ((ssuuggaayyaaさん作))EEllaassttiiccsseeaarrcchhのJJSSOONNのスキーマ構造から、 DDBBFFlluuttee の CCoonnddiittiioonnBBeeaann に「うりふたつ」のクラスを自動生成する機能、新しい FFeessss1100 で利用されています パッと見、どう見ても CCoonnddiittiioonnBBeeaann なのに、 検索してるのは EEllaassttiiccsseeaarrcchh。なんとも不思議77LLiisstt<> uurrllLLiisstt == ffaaiilluurreeUUrrllBBhhvv..sseelleeccttLLiisstt((ccbb -->> {{ ccbb..qquueerryy(())..sseettCCoonnffiiggIIdd__EEqquuaall((ccoonnffiiggIIdd));; ccbb..qquueerryy(())..sseettEErrrroorrCCoouunntt__GGrreeaatteerrEEqquuaall((ccoouunntt));; }}));;LLAASSTTAA LLaassttaaFFlluutteeの誕生
余談ですが…22MMaaiillFFlluuttee hhttttppss::////ggiitthhuubb..ccoomm//ddbbfflluuttee--sseessssiioonn//mmaaiillfflluuttee メールテンプレートから対応クラスを自動生成して、タイプセーフにメール送信!スタートアップで作るシステムは、 大抵メール機能が必須。 なので、LLaassttaaFFlluutteeにデフォルト装備。すでに実運用でバンバンメール飛んでます。78LLAASSTTAA LLaassttaaFFlluutteeの誕生
余談ですが…33組み込みJJeettttyy,, 組み込みTToommccaattで運用。 ee..gg.. jjaavvaa --jjaarr hhaannggaarr..wwaarrJJeettttyyBBoooott hhttttppss::////ggiitthhuubb..ccoomm//ddbbfflluuttee--sseessssiioonn//jjeettttyy--bboooottTToommccaattBBoooott hhttttppss::////ggiitthhuubb..ccoomm//ddbbfflluuttee--sseessssiioonn//ttoommccaatt--bboooott あまり使わない機能 ((jjaarrの中のアノテーションとか)) は、 オプションにして、起動スピードを速めています。依存はしていませんが、LLaassttaaFFlluutteeの基本構成です。79LLAASSTTAA LLaassttaaFFlluutteeの誕生
続々と若者たちが…「((プライベートで)) BBttooCCのサービスを作りたい! よし、LLaassttaa使おう」 なーんてムードに。((すでに、実装中の若者もいます))80LLAASSTTAA LLaassttaaFFlluutteeの誕生
ならば、jjfflluutteeもDDBBだけじゃなく、 WWeebb側でも、 スタートアップを支援したい…RRDDBBのお風呂はどこいった!!??81LLAASSTTAA LLaassttaaFFlluutteeの誕生
82(#3LLAASSTTAA LLaassttaaFFlluutteeの誕生
FFAAQQ11:: QQSSpprriinngg FFrraammeewwoorrkk はライバルですか?83LLAASSTTAA LLaassttaaFFlluutteeの誕生
FFAAQQ11:: AAいいえそもそも全然敵いませんし、 SSpprriinnggが積極的に選択されないような場面での選択肢の一つになればいいなと思っています。それゆえに、リーン・スタートアップ などの、少人数から始める変化の激しいシステム開発に特化しています。84LLAASSTTAA LLaassttaaFFlluutteeの誕生
FFAAQQ11:: AAそれどころか、LLaassttaaFFlluutteeは、 SSpprriinngg FFrraammeewwoorrkk,, SSpprriinngg MMVVCC にも、 大きな影響を受けていて、 尊敬するフレームワークの一つです。また、最近のDDBBFFlluutteeは、SSpprriinnggとの組み合わせが多く、jjfflluutteeとしても非常に身近なフレームワークです。85LLAASSTTAA LLaassttaaFFlluutteeの誕生
FFAAQQ22:: QQRRuubbyy oonn RRaaiillss は ライバルですか?86LLAASSTTAA LLaassttaaFFlluutteeの誕生
FFAAQQ22:: AAいいえそもそもまったく敵いませんし、 RRuubbyyが得意な人がLLaassttaaを使う必要性はあまりないです。JJaavvaaが得意で、JJaavvaaの特徴を活かしてやっていきたいんだけど、フレームワークどうしようかなぁと迷っている人の選択肢の一つになればいいなと。87LLAASSTTAA LLaassttaaFFlluutteeの誕生
FFAAQQ22:: AAでも、こういろいろと考えると、 スタートアップの現場で、なかなかJJaavvaaが使われない理由がよくわかるなぁと しみじみ。。。((SSccrriipptt言語強い)) なおさら、「JJaavvaaならでは」の リーン・スタートアップというのに、 チャレンジしたいと。88LLAASSTTAA LLaassttaaFFlluutteeの誕生
FFAAQQ22:: AAコンパイルが凶ではなく、 吉と出るような アーキテクチャを!89LLAASSTTAA LLaassttaaFFlluutteeの誕生
FFAAQQ33:: QQDDBBFFlluuttee以外のOO//RRマッパーは使えますか?90LLAASSTTAA LLaassttaaFFlluutteeの誕生
FFAAQQ33:: AAほぼ、いいえ。厳密には、はい。例えば、 FFeessss1100は、EEllaassttiiccsseeaarrcchhなので、 DDBBFFlluutteeのRRDDBB機能は使っていません。 ((代わりに、EESSFFlluutteeを使っています)) ddbbfflluuttee--rruunnttiimmeeのjjaarrは入�りますが、別のOO//RRマッパーを使うことはできます。91LLAASSTTAA LLaassttaaFFlluutteeの誕生
FFAAQQ33:: AAですが、そもそも LLaassttaa は、 DDBBFFlluutteeに強く依存をすることで、スムーズにDDBB側と連携することに重きを置いています そして、LLaassttaa で作るようなサービスであれば、DDBB変更への耐性がキーポイントになると想定されるので、やはり CCoonnddiittiioonnBBeeaann は外せない......とまでいかなくても、RReeppllaacceeSScchheemmaa や AAlltteerrCChheecckk などのDDBB管理支援機能は使うことを強くおススメします。 ((どのみち、FFrreeeeGGeennは必ず使います))92LLAASSTTAA LLaassttaaFFlluutteeの誕生
FFAAQQ44:: QQSSIIでも使えますか?93LLAASSTTAA LLaassttaaFFlluutteeの誕生
FFAAQQ44:: AAはい別にSSIIでも、 「特徴がスタートアップに近い開発」 であれば、フィットすると考えます。94LLAASSTTAA LLaassttaaFFlluutteeの誕生
FFAAQQ55:: QQ逆に向�かない現場は?95LLAASSTTAA LLaassttaaFFlluutteeの誕生
FFAAQQ55:: AARR&&DD,, oorr RR&&DD要素を含んだ開発jjfflluuttee自身そういった現場を経験していないので、そこの都合はあまり気にせず作っていますウォーターフォール変化がなければ、変化への耐性もスピードもあまり役に立たないでしょうお金も人((スキル))も潤沢にある別の方法で問題を解決できるかもしれません96LLAASSTTAA LLaassttaaFFlluutteeの誕生
FFAAQQ55:: AALLaassttaaでもいいかもしれないけど、 LLaassttaaじゃなくてもいいんじゃない? ってニュアンス97LLAASSTTAA LLaassttaaFFlluutteeの誕生
FFAAQQ66:: QQ流行りますか?98LLAASSTTAA LLaassttaaFFlluutteeの誕生
FFAAQQ66:: AAいいえそもそもJJaavvaaでスタートアップを行うケース、要はJJaavvaaを使う事業会社が少ないと感じるので、そんな大流行りは期待できません。 ただ、LLaassttaaFFlluutteeがそこを支える選択肢となって、「コンパイルセーフを活かした スピードプログラミング」という手法が、少しでも一目置かれて、そういう事業会社が増えたら嬉しいなと。99LLAASSTTAA LLaassttaaFFlluutteeの誕生
FFAAQQ66:: AA流行らせるというよりかは、LLaassttaaがフィットする現場、LLaassttaaなら問題解決しやすい現場で、適切に採用されて適切に使われて、役に立ったら嬉しいです。100LLAASSTTAA LLaassttaaFFlluutteeの誕生
FFAAQQ77:: QQLLaassttaa って何の略ですか?101LLAASSTTAA LLaassttaaFFlluutteeの誕生
FFAAQQ77:: AAククク102LLAASSTTAA LLaassttaaFFlluutteeの誕生
FFAAQQ77:: AAそれはさておき…LLaassttaaFFlluuttee自身が 「リーン・スタートアップした」 と言えるでしょう。すでに利用者の方々がいらっしゃったので、実際に使って貰いながら開発してきました。さらにこのあと、インクリメンタルに成長させていかないとですね。103LLAASSTTAA LLaassttaaFFlluutteeの誕生
FFAAQQ77:: AAちなみに、LLaassttaaFFlluutteeは、こないだ7月26日に 誕生しました。((初の正式版リリース日)) DDBBFFlluutteeは… ちょうど9年前の9月26日です。 実は今日は、DDBBFFlluutteeの9周�年の誕生日です。((00..11..0011 から9年、11..11..00--sspp99 に))104LLAASSTTAA LLaassttaaFFlluutteeの誕生
FFAAQQ88:: QQさっそく使いたいんですけど......105LLAASSTTAA LLaassttaaFFlluutteeの誕生
FFAAQQ88:: AAまずは、LLaassttaaFFlluutteeを知る上で、EExxaammpplleeがオススメです。そこから新しいプロジェクトを作成できます。11.. EExxaammpplleeをggiitt cclloonnee ((LLaassttaaのページにUURRLLあり))22.. SSttaarrttuuppTTeessttで、 ドメインとサービス名を修正・実行33.. できた。 あとは自分用にカスタマイズ106LLAASSTTAA LLaassttaaFFlluutteeの誕生
FFAAQQ88:: AAシングルプロジェクトか、 マルチプロジェクトか?HHTTMMLLスタイルか、JJSSOONN AAPPIIスタイルか?hhaarrbboorr:: シングルプロジェクトHHTTMMLL,, JJSSOONN AAPPII 混じりmmaaiihhaammaa:: マルチプロジェクトddoocckkssiiddee -- HHTTMMLLスタイル ((AAjjaaxxは使えるよ))hhaannggaarr -- JJSSOONN AAPPIIスタイル107LLAASSTTAA LLaassttaaFFlluutteeの誕生
FFAAQQ88:: AA例えば、マルチプロジェクトで HHTTMMLLスタイルなら ddoocckkssiiddee mmaaiihhaammaa--bbaassee:: ベースのppoomm..xxmmllなどmmaaiihhaammaa--ccoommmmoonn:: 共通クラス用、DDBBFFlluutteeここmmaaiihhaammaa--ddoocckkssiiddee:: WWEEBBアプリDDoocckkssiiddeeBBoooottのmmaaiinn(())で起動 ((ブラウザからアクセス))SSttaarrttuuppTTeessttをJJUUnniittで実行すれば、 これをベース新規プロジェクトが作成される108LLAASSTTAA LLaassttaaFFlluutteeの誕生
EExxaammpplleeマップ109LLAASSTTAA LLaassttaaFFlluutteeの誕生
FFAAQQ88:: AAまだドキュメントも少ないので、 jjfflluutteeに聞いてください。 hhttttppss::////ttwwiitttteerr..ccoomm//jjfflluuttee作者にサクッと聞いて問題を解決、 これもスタートアップの極意です。110LLAASSTTAA LLaassttaaFFlluutteeの誕生
さいごにLLAASSTTAA LLaassttaaFFlluutteeの誕生
フォークして、 あらためて思ったこと「SSeeaassaarrってすごいなぁ」 としみじみ。 これは自分では0から絶対に作れない ※コミッタの方々に、22001155年にして、 尊敬と感謝の念をたくさん感じてます。 素晴らしいコードを、ありがとうございます。112LLAASSTTAA LLaassttaaFFlluutteeの誕生
オープンソースのいいところプロダクトは静かになっても、 ソースは旅立ち、 進化できる。113LLAASSTTAA LLaassttaaFFlluutteeの誕生
LLaassttaa DDii tthhaannkkss…TThhaannkkss,, FFrraammeewwookkssLLaassttaa DDii ffoorrkkss SSeeaassaarr,, AAOOPP aalllliiaannccee aanndd eexxtteennddss iitt,, tthhaannkkffuull wwoonnddeerrffuull ffuunnccttiioonnss.. AAnndd aallssoo ffoorrkkss SS22CCllaassssBBuuiillddeerr ((ccaalllleedd RReeddeeffiinneerr iinn LLaassttaa DDii)),, pprroovviiddeess fflleexxiibbllee DDii xxmmll..IIff tthhee ffrraammeewwoorrkkss wweerree nnoott tthheerree,, nnoo LLaassttaa DDii hheerree..II aapppprreecciiaattee eevveerryy ffrraammeewwoorrkk.. **ffrroomm GGiitthhuubb ppaaggee ooff LLaassttaa DDii114LLAASSTTAA LLaassttaaFFlluutteeの誕生
LLaassttaaFFlluuttee tthhaannkkss…TThhaannkkss,, FFrraammeewwookkssLLaassttaaFFlluuttee ffoorrkkss SSAASSttrruuttss,, SSttrruuttss aanndd CCoommmmoonnss uuttiilliittiieess aanndd ((hheeaavviillyy)) eexxtteennddss iitt..AAnndd iiss iinnfflluueenncceedd bbyy SSpprriinnggBBoooott,, PPllaayy22..IIff tthhee ffrraammeewwoorrkkss wweerree nnoott tthheerree,, nnoo LLaassttaaFFlluuttee hheerree..II aapppprreecciiaattee eevveerryy ffrraammeewwoorrkk.. **ffrroomm GGiitthhuubb ppaaggee ooff LLaassttaaFFlluuttee115LLAASSTTAA LLaassttaaFFlluutteeの誕生
BBiigg TThhaannkk yyoouuわらちゃん、ぺろった、らいと、きっとさん、ddoocckkssiiddeeのEExxaammppllee作りありがとう。ssaawwくん、mmoorriizzoonnee、でこちゃん、 hhaannggaarrのEExxaammppllee作りありがとう。じゅんぺー、モデル作成ありがとう。 yyaappppyy、特徴のレビューありがとう。116LLAASSTTAA LLaassttaaFFlluutteeの誕生
CCrraazzyy TThhaannkk yyoouussuuggaayyaaさん、aawwaaaawwaaさん、mmiiyyaassaammaa、 まだ一行もコードがない状態から「使う!」と言ってくれて、そして、実際に使ってくれて、ありがとうございます。UU--NNEEXXTTの友人エンジニアのみなさん、 LLaassttaaFFlluuttee採用ありがとうございます。117LLAASSTTAA LLaassttaaFFlluutteeの誕生
GGrreeaatt TThhaannkk yyoouuレイハウオリ、ビズリーチ、ルクサに 大きな感謝を。ここでの支援経験が、 すべて LLaassttaaFFlluuttee につながります。ビズリーチのスタートアップで DDBBFFlluuttee を選んでくれた ssttaakkeeuucchhii さんに大感謝。 それがなければ LLaassttaa はありませんでした。118LLAASSTTAA LLaassttaaFFlluutteeの誕生
SSuuppeerr TThhaannkk yyoouuDDIIOO様、スライド作成ありがとう。 あとでお菓子あげるね。119LLAASSTTAA LLaassttaaFFlluutteeの誕生
おしまいごせいちょう ありがとうございました。LLAASSTTAA LLaassttaaFFlluutteeの誕生