2014年12月31日水曜日

そーだいに2014を振り返る

巷では今年一年を振り返るエントリーが流行ってみたいなので自分も今年を振り返ります。
今年は「アウトプットの品質向上」と「イベント企画者として参加者満足度を上げる」事を目標に頑張りました。
なのでまとめも今年の参加&主催イベントを中心にまとめます。

1月
第10回岡山Python勉強会を主催した
去年に引き続きPython勉強会を続けました。
@yamayama_k5さんが中心に開催してくれたお陰で僕は毎回ハングアウト参加です。
Python勉強会の緩さは僕は大好きで言語自体もすごく好きになりました。
最近はシェルスクリプトを書くならPythonで書くことが多いですね。
あとツールがPythonで書かれることも多いのでPythonを読むことも多いです。

2月
オープンセミナー広島@2014を主催した(副実行委員長)
第11回岡山Python勉強会を主催した

2013は自分が実行委員長でしたが今年はひむひむでした。
僕は登壇もさせてもらい、非常に良い経験をさせてもらいました。
他の講師がすごく豪華で参加者としてもすごく勉強になった一日でした。
実は来年のオープンセミナー広島@2015も登壇します。
すでに申し込みが開始されてるので興味がある方はぜひ参加してみてください。

申し込みサイト

Python勉強会はcheckIOとかしてた気がしますw

3月
第三回チャリティ大会を主催した

3月ブログ書いてないwww
Python勉強会はみんなが多忙のため延期に(´;ω;`)ブワッ
格ゲーのイベントやってました。
この時にSeleniumをPythonで動かしたのですがPython良いよPython(*´ω`*)

4月
第3回 中国地方DB勉強会 in 福山

今年のDB勉強会を本格始動としてまずは地元開催してきました。
三谷さんにDBの負荷分散の話をしてもらったり、みんなでDB設計のハンズオンをしたりしました。
ハンズオンは非常に好評で今年のDB勉強会の方向性がここで決まりました。
来年も福山ではチャレンジしていきたいですね。
なおPython勉強会はまたもや多忙により延期(´;ω;`)(´;ω;`)ブワッ
あとは今話題のクレオフーガソニックガーデンに遊びに行ったりしました。
話題のベンチャー企業の経営者の人の考え方に触れれたのは本当に貴重な経験でした。


5月
第12回 岡山Python勉強会

@kenji_sさんのFuelPHP本のレビューとかしてました。
今は神本として出てるのでFuelPHP1.7系を使ってる人は必読です。
ほんと贔屓目無しにいい本ですよ。



そして待望のPython勉強会が開催されました。
久々だったせいか参加者もいつもより多くて賑やかでしたね。
去年はこの時期にJJUG CCCで登壇したり転職活動したりしてたけど平和な5月を過ごした気がします。

6月
第13回 岡山Python勉強会

日本PostgreSQLユーザ会の理事会出たりしましたが基本仕事尽くしの一ヶ月でした。
symfony2を触ってて色々と心が折れそうになった時期ですw
今からちゃんと仕切り直せたらこの時に書いたコードもまた違うのに…と思ったりもします。
そしてPython勉強会には職場から静かに参加する時期でしたw
やっぱ久々に現場に行って参加したいですね。

7月
第14回 岡山Python勉強会
第四回 中国地方DB勉強会を開いてきた in 岡山

DB勉強会は岡山でチューニングをテーマに開催しました。
今年一年でもっとも実践的な内容だったと思います。
僕自身も学ぶことが多く、特にMySQLとPostgreSQLで比較しながらSQLチューニングを見れたのは良かったです。
どうしても得意なDBの知識で他のDBのチューニングにアプローチして遠回りすることが多いのでこのハンズオンは需要があると思います。
また機会を見てどこかでやりたいですね(鳥取とか?)

Python勉強会は人数が少ないのでチュートリアル進めずに座談会みたいな事してました。
結構この座談会から得るものが多いのもPython勉強会のいいところですね。

8月
第15回 岡山Python勉強会

ブログがはてブのホットエントリ入りしてバズった。

PHPerの書くコードの保守性・管理性が劇的に上がるのスマートな方法

決して難しい話もしてないし周囲の近い人には「わざわざブログの記事にするような内容でも無くね?」と言われたのですが需要はあったようです。
これってPHPに限ったことじゃなくてPythonだろうがJavaだろうが似たようなもんだと思うのでそれが需要があったのかもしれません。
また徳丸さんも言ってますが「最近のPHPはセキュア」になっています。
コードを書くにしてもIDEもNetBeansやPHPStormなど環境が揃ってます。
PHPがWebではDisの対象になりがちですがそれでもWebアプリのビジネスの中心にまだまだ要ると思います。
今後、少しでもみんなが楽しくコードを書くことができればいいなぁと思います。
あとPython勉強会は続座談会でした。
でもずっとsymfony2のドキュメント読んでました

9月
オープンソースカンファレンス2014 Hiroshimaに参加した
第五回 中国地方DB勉強会 in 広島
第16回 岡山Python勉強会

OSC広島は「FuelPHPで始めるモダンPHP開発!!」という内容で登壇してきました。
毎年最終枠になり、聞きたいセッションと被るという状態なのですが来年は目玉セッション聞けるようにしたいですねw
それにDB勉強会史上、最大に豪華なメンバーで第五回を開催しました。
どのセッションも充実しており必見です。
YouTubeに動画を残してますし資料も公開されてますので上記のリンクから参考にしてみてください。
Python勉強会はついにDjangoのチュートリアルが終わりました!
これが2014年の目標だったので良かったです(*´ω`*)

10月
第17回 岡山Python勉強会

みんなでまったりユニットテストについて語り合った。
IDEのサポートが充実してるPyCharmが最強って話で落ち着いたw
そしてついに30代に突入した。
なので20代が終わるので20代を振り返った。

20代のうちにやっておいたほうがいい20のことを壮大なる20代で振り返る。

11月
第六回 中国地方DB勉強会 in 山口

例のごとく多忙によりPython勉強会は延期に(´;ω;`)(´;ω;`)(´;ω;`)ブワッ
そしてDB勉強会が初の山口開催で山陽地方統一しました!
参加者がギリギリまで増えず胃が痛い思いもしましたが最終的には10人以上の参加で良かったですw
また内容が本当に豪華で個人的にはもっともっとみんなに見てもらいたい内容でした。
特に玉川さんと梶山さんのセッションは関東でもなかなか聞けない内容と講師なので必見です。
動画が例のごとくYouTubeにあげてますので上記のリンクから見て下さい。

12月
PostgreSQLカンファレンス2014で登壇してきた

前々日に39℃を超える高熱で悶える過酷な試練を乗り越え、無事2本登壇してきました。
1本目のHerokuの話はDBAを全否定するような内容でしたし抽象的な内容だったので評判が良くないみたいです(´・ω・`)
チュートリアルの方が参加者は他のチュートリアルのセッションよりは少なかったですが評判が良いみたいです(*´ω`*)



あとは忘年会議行って来ました。
忘年会議に参加すると一年が終わったなぁって感じますね。
そしてPython勉強会は年末なので延期になりました(´;ω;`)(´;ω;`)(´;ω;`)(´;ω;`)ブワッ


と今年もPython勉強会を中心に結構定例モノな勉強会を開催しました。
今年はオープンラボ備後としてイベントを開こう!と思ってたのですが結局行えず(´・ω・`)
来年の課題ですね。
また今年は去年に引き続き「アウトプットの品質向上」を目指してきました。
資料の作り方も工夫したり登壇の時には下記の本で学んだ事を意識したりしました。



お陰で「良かったよ」と言って頂けることが多かった気がします。
あと僕は登壇は「ちゃんと予定通りきっちり終わる」ようにしてるのですが今年はただ予定通り進めるのではなく、メリハリを付けれたような気がします。
またブログも今年はホットエントリ入りを始め、はてブなどで好意的な評価をしてくださることが多い一年でした。
これらは量が質に変わってきた過渡期かと思いますので今後も引き続き頑張っていきたいと思います。
ということで今年は「100満点ではないけど及第点」な一年になったのでは無いでしょうか。

ということで今年も残すところわずかですがみなさん良いお年を。

2014年12月9日火曜日

第六回 中国地方DB勉強会を開いてきた

第六回も無事終わりました。
第六回はクラウドをテーマに山口で開催されました。
特にAWSのAuroraの話とMySQL5.7の詳しい話を聞けたのは山口が中国地方最速だと思います。
どちらも非常に興味深く、今後のRDBも目が離せないと感じましたね。
本当に色々とご協力していただいた講師やスタッフの皆様、ありがとうございました。
そしてそんな第六回の詳細は次のとおりです。

■登壇資料など
中国地方DB勉強会のポータルサイトにまとめました。

第六回 中国地方DB勉強会


各講師の資料、そして今回はUstream配信をYouTubeに保存しております。
上記のポータルサイトからご参照ください。

■メーリングリスト
次回の告知についてはMLやDoorKeeperを使います。
興味がある方はチェックしてみてください。

中国地方DB勉強会ML Google Group

DoorKeeper


■twitterのまとめ
Twitterについては@eielhさんがまとめてくれています。

第6回 中国地方DB勉強会 in 山口


■動画まとめ

中国地方DB勉強会 YouTube


■第六回のアンケート募集中
当日に参加やUst拝見された方は下記のアンケートに答えてくださると嬉しいです。
次回のコンテンツや今後の運営に活用させて頂きます。

アンケートはこちら
※匿名アンケートです


■第7回 中国地方DB勉強会
日時:2015年1月31日 (土曜日)
時間:13:00-17:00
会場:松江テルサ別館2Fオープンソースラボ

講師予定:

  • PostgreSQL 原田さん
  • MySQL 梶山さん
  • 調整中 玉川さん
  • 未定 山口さん


懇親会:根っこ(松江駅南口)

以上のように考えています。
原田さんにはPostgreSQL9.4の目玉機能のJSONBの話をしていただくと思います。
また梶山さんには山口に引き続き、MySQL5.7の話をしていただくと思います。
なお、懇親会は18:00~20:00で考えています。
交流含めて是非参加をご検討していただけたらと思います。

参考までに翌日から島根では蟹小屋がオープンするそうです。
これは一泊二日の勉強会駆動旅行を発動するしかないですね!!!

また申し込みサイトが出来ましたらMLやDoorKeeperで告知します。
ご興味がある方は上記のMLとDoorKeeperにご登録してみてください!!
12月20日くらいまでには申し込みサイトをお知らせ出来ると思います。

また今回も山口の地元スタッフのお陰で動画に残っています。
是非見てみてください。

とついに山陽を制覇したDB勉強会ですが年明け早々についに山陰進出です!!
特にRubyのお膝元松江市でDBエンジニアの皆様がどんな話をするか大変興味深いですね。
年明け最初のイベントとなりますが次回も皆様とお会いできるのを楽しみにしております。

2014年12月6日土曜日

PostgreSQLカンファレンス2014に登壇してきた。







PostgreSQLカンファレンス2014に登壇してきたので資料をアップします。
今回は初カンファレンス参加でしたが

  1. 日曜から39℃を超える熱を出して死にそうになり、
  2. なんとか体調を取り戻して朝からスタッフ業をし、
  3. 英語がぜんぜん出来ないのに控室では英語飛び交い、
  4. セッションを二本こなし、
  5. 当日いきなり懇親会の司会業引き継ぎをされる

というなかなかセクシーなスケジュールでした。
更にPostgreSQL アドベントカレンダーの担当日でそれはとっても嬉しいなって…
自分で切ったスケジュールながら過密で濃厚な一日を過ごすことが出来ました。
カンファレンスとしてはどのセッションも盛況でしたね。
特にハンズオンやチュートリアルのような初心者〜中級者のコマは立ち見が出るほどの大盛況でした。
(30人ぐらいの部屋に80人が押し寄せるようなセッションもありました)
私としてもガッツリDBエンジニア向けのコンテンツが楽しめました。
また初心者・中級者向けのコンテンツが揃った面白い一日だったとも思います。



そんなカンファレンスですが僕自身の感じたことをいくつか

■若手にもっとアプローチしていく

これはカンファレンス関係なくPostgreSQLのコミュニティとしてもやっていることです。
ですがそれでも参加者層の年齢層は高い印象でした。
なのでWeb系やスマフォ系の開発者向けのコンテンツを作らなきゃいけないと感じてます。
またそれが僕のやりたい事だなと再認識しました。
裾野を広げる方法って色々ありますが多くの人が取り組むことで良い結果になるとも思います。
例えばみかかデータの人が偉くなってごっそり新卒とって連れてくればえぇねん。


■初心者や中級者向けのコンテンツを中国地方DB勉強会で回せるようにする

今回もっとも人気のあった

  • バックアップの話
  • パラメータチューニングの話
  • SQLチューニングの話

を一日で学べるようなコンテンツとして用意します。
それを各地方で再演するような漢たちで中国地方DB勉強会でやっていきたいなぁと。
ただ同じことを何回もやると毎回参加するコアユーザーが物足りないというジレンマ。
(しかもそんなコアユーザーがありがたいことに現在の参加者の半分以上なわけですが)
それは篠崎愛呼ぶとかSQLアンチパターンやデータベースリファクタリングの読書会も兼ねるとか篠崎愛呼ぶとかして毎回参加する人も楽しめるようにバランスを取るのが課題ですね。


■海外のカンファレンスに参加すべき

今回、インターナショナル枠で多くの外人講師に来ていただきました。
懇親会でもお話を聞かしてもらいました。
その中でもっと海外の現状を知ること、そして交流できるようになることが僕にも必要だなと感じました。
例えば

  • 中国 10億人
  • インド 10億人
  • インドネシア 4億人

単純に日本の人口と市場比較できるわけではないですがここだけで25億人もいるわけです。
日本人としてはアジアの44億人いるエリアの先進国なわけです。
欧米に視野を向けるのも面白いとは思うのですがアジアとしていろいろ考えるとそれはそれで面白いなと。
そんなことをビール飲みながら考えたらそりゃ海外のカンファレンス行くしか無いだろ!となったわけです。
まぁ英語全く出来ないので生きて帰ってこれるかが課題ですが…


ざっとこんなところですね。
未来を想像して楽しい一日でした。

2014年12月5日金曜日

今、データベースは中国地方が一番アツい!!

PostgreSQL Advent Calendar 2014 の 5日目です。

昨日の記事はosaponさん

RDS for PostgreSQLを使い始めてみたレポート

でした。
LC_COLLATEの指定などPostgreSQLの嵌りそうな箇所もしっかりフォローされていて面白かったです。

それでは今日の本題。
今もっともデータベースの熱量が高い場所はどこでしょう?
そう、表題のとおり中国地方が今、最もアツいです(そーだい調べ
理由はこれです。




すでに過去6回開催されています。
内容はPostgreSQLも当然の事、MySQLやMongoDBなど多岐に渡ります。
最新事情や内部構造の話など上級者も満足すること間違い無しです!!
更にチューニングのハンズオンやAWSのハンズオンなど初心者、中級者向けのコンテンツも用意されています。
本日開催されたPostgreSQLカンファレンスの登壇者の方も多く参加していただいております。

皆さん興味が湧いてきましたか?
そんなみなさんに朗報です!!
なんと来月、島根県松江市で第七回が開催されます!!!

■第七回 中国地方DB勉強会 in 島根
日時:2015年1月31日 13:00~17:00
会場:松江テルサ別館2Fオープンソースラボ
http://www.sanbg.com/terrsa/index.html
参加費:無料!!

今回はPostgreSQLの話題と初心者向けのSQL全般の話などを用意する予定です。
翌日からは蟹小屋が始まるのでぜひ、一泊二日の勉強会駆動旅行などを企画してみてはいかがでしょうか?
皆さんの参加、お待ちしてます!!!

ということで今、大活躍中の中国地方です。
運営に興味がある方は気軽にサイトのgitリポジトリにプルリクして頂いたり、ご連絡いただければと思います。

そしてまだまだ続くPostgresPostgreSQL Advent Calendar 2014。
明日はKawarashoさんです。
どんな話が聞けるのか、今から楽しみですね!!

2014年11月19日水曜日

20代の転職について

巷で下記のブログが盛り上がってたので便乗してみる。

「中途採用面接で、志望動機を聞かれて「もっと給料が欲しかったからです」と回答した人がいた。」

つい先日30代突入した私だが19歳で就職したので社会人歴としては丸10年以上働いた事になる。
その中で転職回数は3回である。
途中で派遣やったりバイトやったりした時期もあるけど正社員として転職した回数は3回。
具体的に職歴は

1 広島県の公務員 5年
2 広島県福山市の大手会社の子会社の社内SE(主にインフラ系) 3年
3 大都会岡山の某Web制作会社でPG 1年半
4 まほろば工房でWebエンジニア 今現在

となっている。
それぞれの職場はそれぞれ縁に恵まれて本当に私にとって大きな経験をさせてくれた。
特に公務員から社内SEへの転職はリーマン・ショックと重なり、涙なしには語れない壮大な物語が。
(それはまた別の機会に)
なので私自身、転職回数は同世代では多い方だがマイナスポイントだとは思っていない。
しかも会社規模的には大きな会社から小さな会社に流れてる。
そこを世間一般的に見ると「給料も下がりそうだしそもそも公務員辞めるととか信じれない」とよく言われる。
だが給料に関しては公務員の頃から考えると

「確実に上がっている」

のは間違いない。
ただ公務員と現状だと「給料は上がっているが将来の担保は下がっている」とも見れる。
そもそも公務員も30年後は「今の形と同じとは限らない」が持論なのでここについても個々で見解が別れる。
そんな細かいことは置いておいて、なぜ給料が上がっているかと言うと単純に社長面接時に

「この給料より下だと生活出来ないので転職しません」

とハッキリ伝えているからだ。
他にもPostgreSQLユーザ会の事も伝えたし自分の目指すキャリアパスの話もした。
それらを理解してくれた上で雇っていただけるなら会社にしっかりと貢献していきたい旨の説明をした。
社長はそれらに関してその場で即決してくれて今がある。
以上の経験からお金の事は決めれるポジションの人との面接時に伝えた方が良いと思う。
そもそも転職するなら言いたいことは最初にちゃんと伝えたほうが採用する側にも転職する側にも良い。
でここから公務員時代から思ってた事で伝えたい事なのだが

「いい仕事はプライベートが充実してるからこそ成立する」

と言うこと。
プライベートの充実は趣味もあるだろうし恋愛を含めた人間関係もあるだろう。
そのプライベートの充実のベースになる一つの選択肢はお金だ。
公務員時代、色んな人を見てきたが「人の行動には理由がある」という事を沢山体験してきた。
例えば給料が極端に少ないのであれば悪事に走ることだって十分にあり得る。
自分の納得いかない給料で働くと仕事の品質は落ちる
お金に困ること、悩むことはすぐに人間関係の歪みを生むし生活の悪循環を作る
だから給料が下がる転職と言うのは出来る限りするべきでは無い。
そんな重要な項目である給料だが会社が調整しやすい項目の一つでもあるのが給料だ。
もし貴方が優れたエンジニアだとしても会社で

「ロリ巨乳童顔系メガネ女子の娘とペアプロしたい!」

と言って用意してくれる会社は少ない。
だが

「前職よりも10%高い給料が欲しい」

といったら調整してくれる会社はあるはずだ。
なので以上のことを踏まえても転職時には給料はまず最初に調整した方が良い。
もしそれが何社も受けて通らないのであれば貴方のセルフブランディングが足りないか求められる水準に達していないかなので自己研鑚すれば解決する問題だ。
給料が納得できた上で福祉であったり作業環境であったり仕事のやりがいの話が始まると私は考えている。


と言う事でコンパイルが終わったので私は頂いている給料に見合った成果を出すために仕事に戻るとする。

2014年10月10日金曜日

20代のうちにやっておいたほうがいい20のことを壮大なる20代で振り返る。

そーだい、20代終わるってよ…

ってなわけで20代が終了のお知らせです。
そこでこんな記事を見かけました。

20代のうちにやっておいたほうがいい20のこと


かなり共感出来たので自分が20代をどの様に過ごしたか、この記事の項目をパクリスペクトして振り返りたいと思います。


1 目の前のことに全力で取り組む

全力で人生謳歌してるつもり。
歳を取ると以前出来てたことが出来なくなることもなる。
環境が変わっても同様。
なので今やらなきゃいけないって言う危機感で生きてる気はする。
ただこれは30だろうが40だろうが一緒だよね。

2 自分が好きなことを見つける

これは10代で済ませた感じ。
20代は好きなこと、やりたい事に自分のリソースを投資する日々だった。
格ゲー然り、妻然り、コミュニティ然り。
ただちょっと今は家族以外のことに関してはリソースを抑える時期かなぁと思う。
なので30代は家族と一緒の時間を大事にしつつ、その時を楽しみたい。

3 ひとつのことを極める

全然極めれてないなぁ。
好きな事も仕事のことも。
ただ自分のリソースを全力で突っ込めば誰でもそのジャンルで「わりとそこそこ上の方」に行けるって言う経験は出来た。
で「わりとそこそこ上の方」に行って初めて見える景色も知れたしその上に景色が有ることも知れた。
これは非常に大きな経験だったけど20代で目指したその上の景色は結局行けそうもない。
なので30代からは前の経験を生かしつつ真っ直ぐじゃなくてジグザグみたいな感じで上を目指そう。

4 良い人やモノに出会える機会を逃さない

20代は間違いなく人の縁に恵まれた10年だった。
色んな人の影響を受けたし色んな考え方に触れた。
これは人間的な成長にすごく効果的だった。
でもこれは10代の時に学んだ「行動しないと変わらない」って経験を元に色々アクションを起こした結果かなと。
なので今後も縁を一番大切にしつつ、行動力に磨きをかけて行きたい。

5 ギブ・アンド・ギブの精神を持つ

これは恥ずかしながらホント最近、20代後半で感じるようになった。
ギブ&ギブというかまずギブ。
じゃないとまぁ助けてくれる事なんて無いよねと。
20代前半の時は何もしてないのに先輩が奢ってくれたりチャンスくれたりしたのは

先輩たちがギブの精神を引き継いで後輩に託してた

からなんだと気付いたのも最近。
そんな感じでまず行動の中で「誰かがやらなきゃいけない面倒事」は自分がやる。
これは世代関係なく因果応報というかずっとやってくことで積み重ねていくもんだろうなと思う。
こういうのが徳を積むってことなのかも?

6 一歩を踏み出す勇気を持つ

多分コレに関してはアタマのネジが二~三本吹っ飛んでるんじゃないか?ってレベルで平気。
10代とかもっと前から失敗を重ねて来た結果

失敗しても死なない

って言う経験と

失敗・成功関係なく行動することが効率の良いのレベル上げ

って言う経験則があるからだと思う。
あとはレベル上げの中でより最適解を見つけていくうちに色んな手法も学んだし考え方も身についた。
そう思うと20代で築いた自分のスタイルってのは

「躊躇いもなく引き金を引ける」

ってことかもなと思ったりもする。
頭良い方じゃ無いから行動することで補ってるのかもしれん。

7 明日会社がなくなっても生きていけるだけのスキルを磨く

どうなんだろなーw
まぁ転職はできる事を20代で学んだ。
あと関係無いけど公務員の最強のところは

上司にめっちゃ文句行ってもクビにはならないし立場弱くならない

って事だったなと分かった。
まぁアレだ、何もスキル無いところから公務員辞めたけどなんとかなってる。
って事は前述にもあったけどスキル云々よりは全力でやれば「そこそこ上までいける」って経験の方が大事かも。
スキル云々とか給料云々は結果として後から付いてくるもんな気もするし。
だから元ブログからの引用だけど

いつクビを切られてもなんとでもなるという自信と度胸から、たいてい物事がうまく回り出します。

ってのが大事なわけでスキル云々よりはそう言った成功体験?みたいな事が出来た事が良かった。
なので会社無くなっても死ぬ気でなんとかすれば家族を養っていけるんじゃないかなw

8 自分のポートフォリオになるアウトプットを作る

アウトプットは意識してしてるつもり。
まぁこのブログが自分の価値を表してるかというと微妙だけど開催したイベントの内容には価値があると思う。
ポジションが人を育てるとよく言うけどJPUG中国支部長ってポジションもそう。
ただTwitterが今一番のポートフォリオとして機能してる気がする。
そしてTwitterのアウトプットが自分の価値を高めているかというと色々と運用に失敗してる気もするw

9 イライラ・カリカリしない

これは10代のナイフのような男()から瞬間湯沸し器に変わる程度の進化しかしてない。
ただ言葉を感情に任せてぶつけなくなっただけでも成長かなw
まぁでも孔子も

六十にして耳順い

って言うけどまだまだ修行が必要なところだね。
イライラしてもなんの得も無いしせめて感情を上手く抑えれるようにはしなきゃいけないなね…

10 自分の期待値をコントロールし、ポジティブに考える

まぁネガティブにはなるんだけど復活は早いと思ってる。
それはやっぱネガティブになってる時間の反省も大切だけどずっとネガティブになっても何も進展しないから。
コレに関しては10代の時にこう思って実行に移して自分の中の性格の一部まで根付かした10代の俺偉い。
これで20代はホントに色々助けられた。
やっぱ20代になってもアクション増やし続けてると良くも悪くも大きな失敗もする。
そりゃ凹む。
そんなときにこの考え方のお陰で精神衛生上はすごく良かった。
実際に妻には言ってないけど仕事ヤバイかもなーって思った事とか色々あったけどまぁ今も無事生きてる。
そういった意味でもポジティブに考えるってよりは切り替えの早さってのは大事だね。
まぁ後基本ポジティブ過ぎるくらいだからむしろ計画性みたいなことも学ばないといけないけど…

11 ネガティブな発言を控える/ポジティブな発言に変える

これホント大事だなって思う。
引用元にも書いてあるけど言葉はその人を表すからね。
それとホントに言ったかどうかは知らないけどマザー・テレサの名言に

思考に気をつけなさい、それはいつか言葉になるから。
言葉に気をつけなさい、それはいつか行動になるから。
行動に気をつけなさい、それはいつか習慣になるから。
習慣に気をつけなさい、それはいつか性格になるから。
性格に気をつけなさい、それはいつか運命になるから。

ってのがある。
そもそも思考が先か言葉が先かは「サピア=ウォーフの仮説」や「言語が思考を規定する」って話もあるから難しい。
それでもやっぱポジティブな言葉を発することは自分にも大事だし周囲へ与える印象も違う。
あとポジティブなことも大事だけど表現の仕方も大事。
同じ意味でも表現やタイミングで捕らわれ方が全然違うからね。
ただ「言語が思考を規程する」にも似てるんだけど「人は知らないことは想像出来ない」ってのもある。
だから言葉は多くの知識の後押しによる知恵みたいなもんなので色んな言葉を聞いたり知ったりすることも大事。
それらを咀嚼した上でポジティブな方向に言葉を変えるって20代後半の課題だった。
ってもまだ全然達成出来てなくてこれもずっとずっと続けていくことだと思う。

12 自分だったらこうするを考え続ける

思考停止せずに問題意識を持つことはとても大切。
ただウメ速でも話題になるレベルの意識高い系()の自分はむしろ「僕の考えた最強の理論」に溺れてしまいがち。
最適解は正論だけじゃなかったりするし切り口は色々あったりするから色んな切り口を覚える事が今後の課題。
俯瞰したり、他人の意見を受け入れたり(コレが一番難しい気もする)、内容を掘り下げたり。
こういうのは習慣にする必要があるから日々繰り返していくしかない。
まだまだこれは20代のうちに身につけれなかったので30代での課題。

13 決まっていない未来に悩まない

未来は創りだすものだと思ってるし選べると思ってるのであんまり悩んでない。
ただ検討と修正は常に行っていて、その中で気付いたことは

「20代の前半で思ってた事の半分以上はゴミクズ」

つまり悩むというかどんなに考えても答えが出ない事も大抵ゴミクズになる。
と思うとあんまり悩まなくて済むw
というか前述なポジティブ思考への切り替えにも通じるんだけど

やってみないとわからないしやったらやったでなんとかなる

ってのが行動を促すきっかけにもなったし色々つながるなぁと思う。
ただ

自分の中で未来とか周囲に関係なく決まってること

ってのは大切なことなのでそれは大事にした方がいいしそういうことを見つけると良い。
20代の自分にとってそれは家族だったし30代になってもそこは変わらないね。

14 人からの評価を気にしすぎない

これはむしろ自分は10代の時に気にしなさ過ぎて痛い子だったので難しいところ。
ただ今は

自分の価値は自分の成果物で他人が決める

と思ってるのでちょっとアウトプットについては気にするようにしてる。
具体的にはよく言われることだけど

  • どんなに頑張っても2割の人とはソリが合わない
  • 逆に2割の人は何をやっても味方
  • 残りの6割は自分のアウトプットで変化する

ってこと。
これを念頭において置くと批判されても余裕が持てる気がする。
あとは自分のアウトプットに対してもこの六割の層がどんな需要と供給がマッチしたのが判断していく。
これを最近はちょっと意識してる。
と言うことなので他人の評価を気にするかしないかについてはバランス大事かなと。
でも他人に依存してしまうよりは自分自身で自立することは大賛成なので引用元にある

20代のときに確固たる自分なりの評価軸を持てると良い

は大切だと思います。
その評価軸がないと6割の人たちに対して一喜一憂してしまうので。

15 現状に絶望しない

諦めないの大事。
大切なことはスラムダンクで学んだ(真顔
つかネガティブの話題とか思考停止とかもそうだけど楽しめる要素があれば人生大丈夫。
毎週金曜日の仕事終わりの飲み会でも良いし今期始まったアニメでも良い。
そういう自分の人生を楽しむ柱みたいなモノを「2 自分が好きなことを見つける」で見つけれた人は大丈夫。
自分はあるから絶望したことない。多分、きっと、Maybe…
あと大抵の事は時間が経つと些細なことだったりする。
時間が経つ悪化することは原因があることなのでそこを取り除けばいいので絶望しなくても大丈夫。

16 実家を出て一人暮らしをする

高校から地元出てたし両親亡くなったの早くて一人暮らし強制だったので10代で済ませた。
一人暮らしから学ぶことは確かに多い。
ただ一人暮らし自由すぎてヤバイ。
特にモラルとか家事とかちゃんと学んでない状態で始めるとカオス。
なので実家居るうちに最低限の家事を知っておく必要がある。
本当は小学生の時の家事のお手伝いとかから学ぶんだろうけど「家事良くわかんねー」ってやつは今のうちに学ぶべき。
または家事やってくれる彼女を見つける方法を学んべき。
妻は一人暮らししたこと無いので子供が自立して出て行った後に俺が先に死んだら大丈夫だろうかとちょっと不安になる。
なので俺は妻より先に死ねない。

17 読書の習慣をつける

ちょっと「たけとも」な話になりますが(ずっとそうだけど)10代の時のがいっぱい読んでた。
(元ブログに「ちょっと壮大な話になりますが」って書いてあったので)
つかどんどん本読む量が減ってる。
技術系もブログとかで知識の触りだけ知ることで次に行っちゃてる事が多い。
なのでもっと本を読みたいんだけどまとまって本を読む時間を上手く作れてない。
そもそも技術系じゃなくても活字自体読むこと減ってる。
今年は吉川三国志が青空文庫になったから読む予定だったのに全然進んでない。
これは20代でむしろ失った事なので30代で巻き返ししたい…

18 食べられるうちにラーメン店や高級飲食店めぐり

食べたいと思ったものが食べれなくなる、そういうことがあるということを20代で知った #痛風
ただ美味いものを食べるって意味だと妻の料理が最強なのでブクブク太ってしまった20代。
その負債を30代で一生懸命払っていこうと思います。
なので「食べれるうちに食べとけ」ってブログ主は言うけども程度がある。
その程度を早めに見つけて早めに対策をすると幸せになれると思う。

あと高級飲食店については子供がいるとなかなか行く機会がない。
お財布事情的にも辛いし、子供を連れて行くのも辛かったり。
なので20代というよりは独身のうちに経験した方が良いことかも。
自分は結婚が早かったしあんまり行ったこと無い。
なので今からいっぱい稼いでいっぱい行きたい。


19 贅沢に時間を使ってぶらり旅/海外旅行

これも20代っていうよりは独身のうち。
結婚して子供生まれるとホント旅行行かなくなる。
それでも勉強会と名をつけて色々行ったりするけど国内になっちゃうし。
特に海外旅行とかホントいかないし子供居ると治安とか金銭とか色々考えて行けないとことかある。
10代の時に国内は色々行ったけどもっと海外とかも行けばよかった。
俺の10代の時にEVO(格闘ゲームの世界大会)があれば…
まぁでも今からいけないわけじゃないしいっぱい稼いで高級飲食店と一緒で色々行きたい。
40代になった頃には子供が自立してるはずだから妻と色々いけるようにいっぱい稼ごう30代。

20 自分でコントロールできないものに悩まない

自分でコントロールできないものっていうよりは

他人に悩まない

ってことかなと。
他にも天候とかAndroidのブラウザ問題とか文字コードや開発環境のメモリが4Gとか色々あるけどそこは

どうにもならないってわかってるので諦めれる

と思う。
けど他人ってどうしても期待したりしちゃうし期待しちゃうと期待通りじゃない時に不満も出る。
なので人の評価のところでもあったけどある程度諦めるというか期待しないってスタンスが大事かな。
まぁ全体的に言えることだけどストレスレスな環境が大事っすわ。


と言う事で20項目答えた。
長かった。
ブログ元の人とはかなり共感できる=ある程度元々意識してた事が多かった。
でもこれって20代ってよりはずっと続けることだよなぁってことも多かった。
なので皆さんもどこかのタイミングで振り返ってみるといいかも。
他にも「こんな事を知っておくと良い」とか「30代のうちに知っておくべき健康法」とかのエントリーが出てくると嬉しいな。

というわけで20代、充実してたし30代が楽しみ。
てなわけで最後は恒例の干し芋置いとく。

私は真に驚くべき​欲しい物を​見つけたが、この​余白はそれを書くには狭すぎる


※デスサイズはまだ2体積んであるので大丈夫です。

2014年10月2日木曜日

[ビール|コーラ]片手に倉貫さんと語る会に参加してきた

先日、岡山でソニックガーデンの倉貫さんとビール片手に語れると聞いて飛びついてきました。

『納品』をなくせばうまくいく」出版記念会 〜 [ビール|コーラ]片手に倉貫さんと語る会


元々はソニックガーデンに勤める英吉さんに

「こんな面白い会できるけどやらないか?」

と誘われたのですがウホッ?!と即その話に乗らせていただきました。
事前準備や倉貫さんとの調整まで全て英吉さんにしていただき、本当にありがとうございました。
ただ実際に現場に行ってみると

英吉さん「じゃあ司会はそーだいで。」

といきなり司会という大役をいただきました。
人前で自分の言いたいことを言うだけならそんなに苦ではないのですがモデレーター的な事はあまり自信がありません。
ですので当日は皆さんの意見を上手く引き出すことが出来ましたでしょうか?
また満足できる意見交換の場に出来たでしょうか?
個人的にはモデレーターをさせて頂いたことでこれはこれで新たな課題が見つかりました。

さて本題のビール片手に倉貫さんと語る会です。
私自身の課題を多く見直す貴重な時間だったと思います。
個人的には


  • 地方の今後のビジネス
  • エンジニアが幸せになるには?


というのが裏テーマにありました。
そこでディスカッションの始まりに素直にその点を倉貫さんにぶつけてみました。
その答えとして


  • 受託開発は「お金がある人」を相手にするビジネス
  • なので受託開発は地方の企業を相手にしてもメリットが少ない
  • 働き方として「地方で働く」のは可能(むしろ推奨?
  • だけど「地方を相手にビジネス」をするのは前述の理由で難しい
  • むしろ地方でやるならサービスを立てる側に回るべき
  • サービス立てる側なら場所の問題はないしむしろチャンスがある?


という内容でした。
仰るとおりでお金のない人を相手にビジネスをするのはお互いに疲弊するだけだと思います。
今後は受託開発はより一層、都市部からお金を引っ張るスキームが必要かもしれません。
(地場大手にコネクションをしっかりと作るって言うのもありますがそれは少数派だと思うので)
じゃあそのために何が必要か?というと倉貫さんは仕事を辞めるかどうか迷った時に


  • 自分の名前で仕事が取ってこれるくらい有名になれ
  • ビジョンを共有して目標に向かって進める仲間を作れ


その2つが出来てから起業した方が良いと当時の上司にアドバイスされたそうです。
私も「周囲に私を知ってもらう」ことは大切と思っていて

自分のできる事を周囲に知ってもらう活動

はそれなりにして来ました。
ただどうしても地方を中心に考えて来てました。
今後、起業と受託を考えた時にはもっと広い世界でアプローチすることが必要と強く感じました。
また地方から都市部の人に対して


  • 名前を知ってもらう
  • 価値を認めてもらう


のは簡単なことではありません。
ただ実際には色んなアクションが取れると思いますのでまずは試行錯誤してみたいと思います。
そして何よりも自分に足りてないのは

仲間を作る


ことですね。
現在コミュニティやプライベートでの仲間は非常に恵まれていて充実してます。
ただ「一緒に(仕事|起業)をする」と言う点で見た時には思いつきませんでした。
これは私が

事業の柱が出来てから人を足せば良い

と浅はかな考えだったのが原因です。
実際の所、ビジョンを共有できる人はなかなか居ません。
地方に関しては特にそうです。
なので諦めていた節があったのですがそもそもとして個だけでやっていけるのかと^^;
ここでちょっと妻自慢ですが私の妻は良き理解者で今まで色んな事をサポートして来てくれました。
料理も抜群に上手くて童顔巨乳(メガネ付き)と非の打ち所がありません。
そんな妻との夫婦生活から学んだ事に

人は誰かと時間を共有することで成長のチャンスが貰える

ということです。
ただ妻は理解があるが故に仕事に関しては口を挟んできません。
結婚の経験からも仕事で仲間と苦楽を共有することが必要だなと思い改めました。
しかし前述の通り仲間作りは酒場に行けばお目当ての仲間が見つかるというものでもありません。
ですのでまずは自分のビジョンをもっと発信して共感してくれる人探すところから始めてみます。

そしてもう一つ思い改めたことは

私自身がもっと0から1を生み出す活動をすること

です。
地方は先ほどのお金の話もそうですが何かとベースの1になるものがありません。
1が抽象的なのですが


  • 人材
  • 資源
  • 情報
  • 物流
  • サービス


色々無いと思います。
でも無い事を嘆いても仕方ないのでもっと創りだす事も考えようと思います。
こちらは「ぼくのがんがえたさいきょうのびじねすもでる」とかが有るわけじゃないです。
なので大きなテーマですが常に念頭において考えていきたいと思います。

ということで自分用のまとめ記事ですけど全然まとまってないので最後に倉貫さんのツイート。


果たして自分が建設的な行動をとれているか。
かなり心に刺さる一言でした。
他にも細かいこととかありますがもっと色んなことに積極的に行っていこうと思います。

####おまけ####

会を通して知り合いから私に対して

  • 意外と色々考えていてびっくりした
  • 真面目な事言うとは思ってなかった

などのご意見を頂きました。
普段からの行いというものも大切だなと反省した次第でございます。



2014年10月1日水曜日

第五回 中国地方DB勉強会を開いてきた

第五回も無事終わりました。
第五回は各DBのトップエンジニアの方々に集まっていただき、超豪華講師陣でした。
テーマはトラブルシューティングと実践的な内容で私自身かなり参考になる情報ばかりでした。
今回の特色はOracleDBからMongoDBまで商用、OSS、NoSQLと多種多様なコンテンツです。
正直地方のイベントとしてはここまで豪華なイベントはなかなかないと思います。
これが無料セミナーとして開催出来たのはJPUGとボランティアスタッフと講師の皆様のお陰です
本当に色々とご協力してくださりありがとうございました。

そしてそんな第五回の詳細は次のとおりです。

■登壇資料など
中国地方DB勉強会のポータルサイトにまとめました。

第五回 中国地方DB勉強会


各講師の資料、そして今回はUstream配信を保存しております。
本当にDBAならず、開発者やサーバ管理者の方は見て損はないです。
特に自分がメインじゃないDBのセッションから得る情報はかなり多いと思います。

■メーリングリスト
次回の告知についてはMLやDoorKeeperを使います。
興味がある方はチェックしてみてください。

中国地方DB勉強会ML Google Group

DoorKeeper


■動画とtwitterのまとめ
今回はUstream配信のアーカイブがあります。
ただし、最初のOracleDBのセッションのみ、大人の事情でありません。
これは来た人だけが聞けた特典ですね!!

Ustreamのまとめ

またUstreamはアーカイブが30日で削除されるという仕様変更が発表になりました。
そのため近日中にYouTubeに移行します。
移行後は各リンクを修正します。

Twitterについては@eielhさんがまとめてくれています。

・第5回 中国地方DB勉強会 in 広島 まとめ #ChugokuDB


■第五回のアンケート募集中
当日に参加やUst拝見された方は下記のアンケートに答えてくださると嬉しいです。
次回のコンテンツや今後の運営に活用させて頂きます。

アンケートはこちら
※匿名アンケートです


■第6回 中国地方DB勉強会
日時:2014年11月23日 or 30日
時間:13:00-17:00
会場:山口県山口市小郡黄金町2-24 YICスタジオ 401教室

内容:クラウドデータベース

※セッション対象予定
RDS for PostgreSQL 曽根(というか私)
MySQL(講師交渉中)

その他、RDSのハンズオンなどを検討中です!!

以上のように考えています。
開催日はMySQL側の講師次第かなぁと思ってます。
誰かRedShiftとかAzureのSQL Serverとか喋れる人が居ましたらご紹介いただけると嬉しいです。
なお、懇親会は18:00~20:00で考えています。
交流含めて是非参加をご検討していただけたらと思います。

また申し込みサイトが出来ましたらMLやDoorKeeperで告知します。
ご興味がある方は上記のMLとDoorKeeperにご登録してみてください!!

と言う事で今回は来てない人はホントUstream見た方がいいと思います。
僕が今まで聞いてきたDBセミナーの中で一番楽しく、そして身になった一日でしたね。
そして次回は初の山口進出です!!
(ついに山陽制覇!!)
年内としては最後のイベントとなる予定です。
皆様と勉強会でお会いできるのを楽しみにしております。

Doorkeeperの参加者一覧.xlsxをhtmlのTableにする

また必要になりそうだから自分のメモ書き。
まずDoorKeeperのExcelのダウンロードはこれを使って自動化する。

Doorkeeperの参加者一覧.xlsxのDownloadを自動化する


でそのExcelファイルをWebに表示するようにPHP書いた

viewExcel2Table


名前カッコ悪いけど勘弁して下さい。
sampleで動くようにしてるのでDocumentRootに配置したら最初から表示するはず。
なのでExcel差し替えてconfig.iniの値をいじれば目的のTableレイアウトにはすぐなると思う。
なお、CDNでBootstrapとjQueryを読んでるのでネットワークに繋がらない環境だとうまく表示しないと思う。
そこら辺は臨機応変に使ってください。
またDoorKeeperをターゲットにしてるけどExcelであればなんでも動くので他のExcelでも流用が聞くと思います。

あと一番大事なこと(ならREADME.mdに書けよ)だけど

PHP5.4以上じゃないと動きません。

クロージャー使ってるしArrayは省略記法だしとかも使ってるし。
まぁでもPHP5.3の環境とかもうないよね!!
てなわけで誰かの参考になれば幸いです。

参考情報


LibraryでPHPExcel使ってるけどライセンスはLGPLなので再配布物には公開義務とかありません。
(商用利用出来るよ)

2014年9月30日火曜日

Doorkeeperの参加者一覧.xlsxのDownloadを自動化する

今年だけで二回ほど表題のことをする必要があったんでメモとして残します。
実際の手順としては


  • さくらクラウドにubuntuサーバを建てる
  • 環境構築
  • cronで実行


です。
最初はwgetで余裕だと思ったらCSRF対策がログイン画面にされてた。
なので力技だけどSeleniumで対応しました。
SeleniumでFirefoxを立ち上げてダウンロードするだけなので実際のコードは大した事無いですが一応Githubに残しました。

getDoorkeeperExcel


環境構築の方法と設定はREADME.mdに書いてる通りです。
SeleniumはPythonで動かしてますが2.7以上であれば動くと思います。
(Linuxに標準でついてくるPythonで動きますので3系のinstallは不要です)

例外処理とかそういうのは面倒くさい入れてないのでちゃんとしたい方は修正してください。
他にもログインとか必要なWebサービスのダウンローダーとしては簡単に用意できます。
なので請求書落としたりなどご自由にカスタマイズしてお使いください。

ついでに落として来たExcelをWebのTableで表示するのも一緒に作ってます。
参加者アンケートを公開したいときなどにお使いください。

Doorkeeperの参加者一覧.xlsxをhtmlのTableにする

2014年9月24日水曜日

FuelPHPで始めるモダンPHP開発!!

9/20にサテライトキャンパスひろしまで開催されたオープンソースカンファレンス2014@広島に参加して来ました。

Twitter まとめ:オープンソースカンファレンス2014 Hiroshima


今年で4回目となり、毎年スタッフとして参加してますので今年も迷うこと無く参加しました。
その中で今年は

FuelPHPで始めるモダンPHP開発!!


とPostgreSQLでは無く、FuelPHPユーザ会として参加してきました。
(勿論、PostgreSQLユーザ会としてブースではベンチマークの発表とかしてましたよ)
で当日の資料はこちらです。



資料としては

今からFuelPHPを使う人が知るべき5つのこと+1


の下にあるスライドをリメイクしました。
このページが未だに僕のブログではそこそこアクセスがあります。
ですので需要があると思い、書き直しました。
またFuelPHPを始めたい人は下記のリンクも参考になると思います。




半分以上の時間はデモだったのですが参加して下さった方にインパクトは与えられたでしょうか?
一番反響というか会場がざわめいたのは



だったのが意外でしたw
Profilerは知ってると結構便利なのですが特に説明しているサイトも少なく知らない人も多いのかもしれません。
僕としてはIDEやvagrantの方が反響が大きいと思ったのですが


  • 使ってる人からすると普通
  • 使ってない(知らない人)からするとよくわからない


状態だったのかも知れません。
それに対してProfilerはわかりやすいし簡単に表示出来るのでインパクトがあったのかもしれませんね。
あと会場で「おぉ!」って言われると気持ちいい事がわかりました←
またセッションは強豪ひしめく最終枠だったのですが20人以上の方に来ていただきました。
やはりと言うかPHPを仕事にしてる人が多いのでまだまだPHPフレームワークや開発手法については需要がありますね。
なので機会があれば今後もこういった情報をシェアして行こうと思います。

といことで今年もとても楽しいOSCでした。
今年はスタッフに学生が多く、今後の広島のイベントも楽しみですね!!
来年も開催される事が決定されているので来年も楽しみにしたいと思います。

2014年9月9日火曜日

2014年版 WEB系の開発をするために必要な10の開発環境 ~Windows~

ずっと使ってたZenBookのマザーボードが亡くなられ、初期化されました。
なのでこれを機に開発環境を見直しました。
2年前のまとめはこちら

WEB系の開発をするために必要な10の開発環境 ~Windows~



この頃からはツールも変わったモノもありますしそのままのモノもあります。
ですが必要な項目は依然変わってないと思いますので項目は踏襲します。



1 IME

前回はGoogle日本語入力をオススメしました。
この二年で更に使いやすくなり、もうGoogle日本語入力無しでは生きていけませんw
便利な機能として

郵便番号を入れると住所に変わる
「きょう」→2014/09/06のように日付に変換できる(ことし、あさって等でも可)
「くりえいと」→Createのように英単語の読みで英語に変換してくれる

などです。
顔文字やZ+Hでの矢印なども便利ですね!
AndroidやMacOSなどでも同じ変換が出来るのでマルチプラットフォームでストレス無く使く入力出来るのは嬉しいですね!!
また、流行りの語句なども変換してくれるのが非常に助かります。


2 ブラウザ

ブラウザ事情もIE・Firefox・Google Chromeの3強状態は変わらず。
ただChromeの開発者ツールが一番使いやすいと思うので開発はChromeメインにしてます。
Chromeの開発者ツールの使い方はドットインストールがわかりやすいのでオススメです。

Chrome Developer Tools入門 (全10回)


FirefoxもIEも開発者ツールは付いてるのでブラウザ依存の不具合とぶつかった時などに使えると色んな時に役に立つので調べておいて損は無いですよ。

3 テキストエディタ

僕は今も昔もIDE派です。
でも時々ちょっとconf触ったり、メモ作ったり、直接HTML触ったりするときなどテキストエディタは必要です。
そこで僕が使ってるのはSakuraEditor
矩形選択も置換も使いやすいのでログを見たり集計するときにも役立ちます。
また常駐アプリとしてついてくる機能のgrepが非常に便利です。
Windowsだとソース内のキーワードでgrepしたい時とか困るんですよね。
それがバッチシ対応してくれるし、対応箇所も一覧で出してくれるので非常に使いやすいです。
また補完は辞書のパッケージを追加すれば対応してくれます。
PHPをちょっと書く程度なら十分ですよ!
そしてそんなSakuraEditorの対抗馬なのがSublime Text 3ですね。
UTF-8の環境で使うなら補完、拡張性、どれをとってもSakuraEditor以上のパワーです。
実際に僕はWinSCP(後述)のデフォルトエディタはSublime Text 3をデフォルトにしてます。
一括置換も便利ですしテキストエディタ界の中心的存在です。
長い間、秀丸エディタが築いてきた牙城を崩す存在ですね。
Sublime Textについてはいい本が出てます。



電子書籍版もあるのでSublime Textを始める人は一度読んだ方がいいですよ!!

4 IDE

昔はEclipseを使ってましたが今はすっかりNetBeans使いです。

PHPerがNetBeansを使いたくなる7つの理由


特にFuelPHP使ってる人にはNetBeansが超絶オススメですね。
使い方は上のリンクでも紹介してますが補完もバリバリ聞くしHTMLやJSもバッチシ対応です。
ユニットテストも宣言元にジャンプもデバッカもバッチシです。
var_dump開発しなくて済むとすごい効率が上がりますよ!
ただ最近、Symfony2の時にNetBeansの非力さを感じる時があります。
Symfony2使うとすっごい最初のロードが長いんですよね(´・ω・`)
そんな人には有料ですがPHPStormがオススメです!!
Web系の補完も抜群でNetBeansより軽快です。
Symfony2やCakePHPなどのフレームワークで開発する人やJSもバリバリ書くようなフロント寄りの人は買ったことによるメリットが間違いなく大きいです。
お試し無料期間もあるのでまずは触ってみるのがいいのではないでしょうか。
あと何かと面白いイベントしてることがあるので@samuraismウォッチするのがオススメです。
それと




らしいのでセール待ちせずにサクッと買ったほうが良いと思います。
ツイッターのレスポンスとかメール対応がすごく優しく日本人にも安心対応なのも良いところですね。

5 ローカル実行環境

PHPer御用達はやっぱりXAMPPが主流だと思います。
ですが開発プロジェクトが増えるたびに度重なるバーチャルホスト。
そしてPHPやその他のライブラリのバージョンがプロジェクトごとに違って繰り出されるエラー。
そんな経験皆さんありませんか?
それを解決するにはVMです。
僕は以前からVirtualBoxを使っています。
VirtualBoxはお手軽にWindows上にVMを建てれるので簡単です。
ですがOSのインストールからやらねばならず、ネットワークの設定等のインフラ系の知識も必要とします。
たまになら良いのですが頻繁に、しかも「今すぐ開発を始めたい!」という時には高いハードルになってしまいます。
そこで活躍するのがvagrantです。
vagrantはVMのラッパーとパッケージ化を同時に提供してくれます。
ViretualBox, VMWare, AWSなどのVMに対応しており、高速にかつシンプルにVMを作成できます。
そしてVMへのアクセス、管理、設定も簡略化してくれます。
これにより、開発環境の依存関係に悩まされることなく、そして多くのインフラ系知識のブラッシュアップも必要なく開発に集中できます。
しかもNetBeansにプラグインを入れるとvagrantをNetBeansのGUIで操作できます。
SSHもCygwinのような黒魔術を使うこと無くNetBeansからアクセスできます。
すべてがNetBeansで解決できるので作業が捗ること間違いなしです!!

6 RDB

vagrantの出現によりlocalにDBを入れることがなくなりました。
これによりlocalにアパッチやDBを入れないので開発しない時に無駄なプロセスが起動しなくなりました。
こういうところにもVMを使うと良い点がありますね。

7 DB管理ツール&SQLエディタ

SQLエディタは自分の中ではA5:SQL Mk-2が一強です。
前回ご紹介した時はまだSSHトンネルも無く、PostgreSQLにアクセスするにはドライバーが必要でした。
現状ではSSHトンネルが可能なのでセキュアに接続できますしvagrantへのアクセスも簡単です。
またドライバーが必要ないのでダウンロードして解凍したらすぐに使うことができます。
このお手軽さにプラスして各種機能が非常に強力です。
特にテーブル定義書の出力とER図のリバース自動生成はいつも助けられています。
DBにもマルチ対応なのでMySQLとPostgreSQLでツールを変える必要がないのも非常に助かります。
ただしDB管理ツールではないのでDDLの必要な作業はGUI上ではできません。
(SQLを発行すれば当然出来る)
そこで外部制約やテーブル設計時に強力なのがMySQLならMySQL Workbench、PostgreSQLならpgadmin3です。
DBAツールなので簡単にテーブルの作成や編集もできますし外部制約やDB固有の機能にもバッチリサポートしてます。
それぞれグラフィカルな実行計画の結果やレプリケーションの設定、confの変更なども可能です。
phpMyAdminやphpPgAdminを覚えるよりセキュアで断然便利なので是非活用してみてください。

8 ファイル転送ツール

今はもうWinSCP一強です。
SCPの管理の使いやすさもですが自動同期の機能や開くファイルのエディタの指定など細かく手が届いて便利です。
地味にシンボリックリンクを作れたりパーミッションを変更できたりするのでCGIが苦手な人でも大丈夫です。
更にノートン コマンダー インターフェイスを使うとキーボードでの操作に特化するそうです。
僕もこれから効率向上のために試してみようと思ってます。

9 バージョン管理ツール

こちらもSVNから完全にGitに移行しました。
NetBeansからGitは直接管理できるので基本的にはNetBeansのGUIで触ってます。
しかもNetBeansは自分自身の保存ログとGitのコミットログを使ってソースのDiff出せたりするので超絶便利です。
マジこれだけでもNetBeans使う価値あります。
でもなんでもかんでもNetBeansのプロジェクトに出来るわけではないと思います。
そんな時はSourceTreeがイケてます。
GUIで操作でき、Githubへの連携も最初から念頭に置かれています。
ちなみにプライベートな開発をするときは僕はbitbucketを使ってます。
プライベートリポジトリでも無料なのでちょっとした開発の時は便利ですよ。
また社内で「クラウドにデータを置くのはちょっと…」って時にサーバーを社内に建てることになったらgitbucketがgithubのクローンの中でもダントツオススメです。
Scalaで作られてますが日本人が作者なので情報も多く、環境構築、アップデートともにすごく簡単です。
実際に僕も社内で使ってますがGUIでリポジトリが管理できることはもちろん、プルリクエストとissuesによるチケット管理はすごく便利です。
またWikiやREAD.MEなども対応しており、プロジェクトの暗黙知を無くすプラットフォームが成熟している感じです。
個人的には開発者だけで回すならredmine無しでgitbucketでやりとりしたほうがうまく回る気がしてます。

10 SSHクライアント

最近はTeraTerm proを使ってます。
Tera Term Menuを使うとTera Termのアクセスするサーバの管理もできます。
実際にはvagrantを使い出すとSSHを使うことも減ってきました。
昔はサーバに入ってvimでゴリゴリすることもあったのですがそういう時はWinSCPでは入ります。
なのでほとんどのことは別のツールでことが足りるのですがやはりコマンドラインが必要なこともあります。
昔はPuTTYを使ってたのですがPuTTYもかなり良いので好みの問題かなと思います。


と言うことでVMが出てきたことで環境依存の悩みも無くまりました。
またここでは説明しませんでしたがPHPUnitやBehatなどでテストが充実し、デバッカを使う機会も減りました。
この様に環境がどんどん進化してますのでぜひ一度調べてみると良いと思います。
また今回の内容でPHPerの最新環境に興味が出た人は次の本が参考になります。


また2014/9/20に広島市でオープンソースカンファレンス広島が開催されます。
ここにFuelPHPユーザ会として参加します。
ブースも出しますし登壇もしますので興味がある方は是非遊びに来てください!!

FuelPHPで始めるモダンPHP開発!!


ということでWeb系の方はこれを機に環境を見なおしてみると良いかもしれません。

2014年8月12日火曜日

PHPerの書くコードの保守性・管理性が劇的に上がるのスマートな方法

みなさんお仕事の進捗どうですか?
今日は



こんな軽はずみな発言をしてしまったが故にネットで触れては行けない3大炎上案件について触れる。

※ネットで触れては行けない3大炎上案件とは?
  • Excel関連(スクショとか)
  • 宗教(エディタとか)
  • PHP
のこと。

で今話題の元ネタを既に@sue445さんが魚拓してくれてる。

(炎上したら即魚拓とれるとか世の中ホントに怖い便利になったもんだ。)
なのでもしかしたら炎上して灰になるかもしれないけど勇気出して対抗記事を書く。

■はじめに

まず最初に言っとくけどPHP特有のずっと変わらないスマートな書き方ってあんまり無い。
ずっと変わらないのはPHPとか関係なく世間一般的に読みやすいコードの共通事項。
そういうのは世の中にいっぱいあるのでそう言うところで学ぶと良い。
例えばまずリーダブルコード読む。



これを読んだら
  • 変数のスコープは小さくしよう
  • わかりやすい名前を付けよう
  • ロジックはシンプルにしよう
とか自然と考える。
そしたら使いまわされるたった一つの変数に全部配列で突っ込んで管理とか数千行あるメソッドとか無くなるはず。
これだけで保守性とか管理性が劇的に上がると思う。
こういうのは言語関係ないのでみんなが学んでいくべき。
そして先人が知の高速道路を用意してくれてるのでありがたく活用するといい。

結論これで8割くらいの問題が解決すると思う。
けどそれ言うと終わっちゃうので読みやすいコードを書くことを踏まえた上でPHP特有の事を書いていこうと思う。

1. PHPの今を知る

まずPHPの最近の事情を知るべき
当たり前だと思うかもしれないけどまずホントこれ。
例えば非推奨の関数のereg()使ってる人とかまだ見かける。
そういうのを知りたかったら

PHP:The Right Way

を見ると良い。
原文はGithubで最新情報に常に更新されてる

Githubのリポジトリ

基本の項目を読むだけでもヒアドキュメント構文や三項演算子にも触れているので初級者PHPerにはとても有効だ。

PHP:The Right Way 基本の項目

ただ個人的には変数の宣言については一概に宣言を省略すれば良いとも言えないと思ってる。
たとえば
$fuga = hoge();
みたいな既存のコードで変数もメソッドも一見して意味がぜんぜんわかんないコードと出会った時。
ホントはちゃんとテストコードがあってリファクタリング出来ればベスト。
だけどこんなコードがあるようなプロダクトはテストコードも無い。
しかも$fugaのスコープが長すぎて消すことすら不安。
そんなときに
$users = $fuga;
として$usersを使うのは良いと思う。
これはコメントでもいいけどこういうちゃんと自分なりに意図があってすることには意味がある。

と話が脱線したね。
PHP:The Right Wayを全部読んだら大抵のことは出て来る。
コーディング規約のPSRなんかは新規案件なんかは積極的に取り入れた方が良い。
でも
  • PHP のオブジェクト指向
  • クロージャなどの関数型指向
  • PDO
  • Composer
なんかは読んだだけじゃすぐにはわからないかもしれない。
そういう時はわからない箇所にフォーカスした本を呼んだり実践で試したりを繰り返しやると良い。
オブジェクト指向とかデザインパターンとかいきなり全部スーッと入って来ない。
PHPの良い所はそういうことに対しての正しい情報(ドキュメント)がちゃんと用意されてる。
そして同じくらいダメな情報も用意されてる…
ここで大事なのは情報の選択。
なのでPHP:The Right Wayを更新してるエンジニアのTwitterをフォローしたりすると良い。
(正直自分も完璧である自信はないから今繰り返してる途中)

2. フレームワークを使う

もし今から新規開発をするとしてプレーンなPHPだけで開発をするのはやめた方がいい。
工数もかかるけどそれ以上にオレオレで実装した箇所を保守するのが大変になる。
だからオープンなフレームワークを使うこと。
ただ残念なことにPHPにはRuby On Railsみたいな標準となるフレームワークは無い。
しかしPHPにはオープンなフレームワークが沢山ある。
そんな中でちょっと前までは4大フレームワークは
  • CodeIgniter
  • CakePHP
  • Symfony
  • Zend Framework
と言われていた。
でも最近は
が勢いのある。
ただCakePHPも3系に上がったりSymfony2も2.5が出たりとしてる。
既にそっちを使ってる人が無理に乗り換える必要はない。
でも僕はFuelPHPが好きだからここを読んだ人にはFuelPHPを薦めておく。
LaravelとかPhalconとかYiiがすごくいいよ!って人が居たら是非とも良さをエントリーを書いて伝えて欲しい。
(それを見て僕も、もしかしたら乗り換えるかもしれないw)
でここから先は便宜上FuelPHPを選んでくれたとして話する。
まず知っておくことは
これらが必ず助けてくれるはず。
これらを見てまずはインストールして試してみるとFuelPHPの良さにすぐ気づくはずだ。
え、もっと親切なHow Toが欲しい?
そういう人はこれを読むといい。
FuelPHPの使い方だけじゃなくてIDEやPHPUnitを使ったユニットテストとか開発環境の使い方まで網羅してる。
「最近のモダンなPHP開発を知りたい!」って人も読んでみるといいと思う。
なんかFuelPHPの宣伝になってしまったけど開発をするならなんらかのフレームワークは使った方がいい。
その中でも人気のモノは人気の理由があるからそこに乗っかった方がいい。

3. なんでもかんでもCMSを辞める

さっきのフレームワークの延長上にCMS(コンテンツマネジメントシステム)がある。
これは完成されたアプリケーションを利用するというものだ。
もし、今必要とされてるプロダクトが完全にマッチしてるならCMSを使うといい。
けどPHP界隈では

  • ECサイトはとりあえずECCUBEのカスタマイズ
  • フレームワークのようになんでもWordPressを使って制作

みたいなことを見かける。
それぞれ優れたCMSだけど得意不得意はある。
これはフレームワーク以上に明確にある。
たとえばECCUBEは確かにECサイト向けのCMSだけど注文カートをカスタマイズは大変。
WordPressは本来ブログを作るものだ。
それを無理矢理カスタマイズしてECサイトや複雑なWebサイトにするのはイケてない。
例えばポータルサイトならMagic3が適してるしECサイトはZen Cartだってある。
もちろんブログ付きのホームページを作ったりするのにWordPressは抜群の効果を発揮する。
つまり適材適所が大切。
そしてどれもマッチしないならどれかを無理矢理カスタマイズするよりはフルスクラッチで作ったほうが良い事が多い。

まとめ

結局のところ



これ。
そうすると自然と自力も上がるし保守性・管理性も上がる。
自力が上がれば他の言語に手を出したり(そしてPHPを卒業したり)PHPの良し悪しを汲んであげれるはず。
ということで


コレ最強。
以上がそーだい的な保守性・管理性を劇的に上げる方法。





おまけ

PHPの保守性・管理性とは関係ないけどおまけ。


1. PHPの苦手なことは他に任せる


もう身も蓋も無いけどPHPはみんなの知ってる通り万能な言語ではない。
CMSと一緒で得意不得意があるし特に不得意なところに関しては滅法弱い。
これは変数の扱いが曖昧とか関数の命名規則が統一されて無くてイケてないとかじゃない。
こういう言語としてイケてないところが致命的と感じる場合はPHP以外の言語を書くしかないかな
(「他の言語を書く」の選択肢には転職とかも含めてね)

ここでの苦手なことは「実際にPHPでこれをやろうとしたら苦行」みたいな事。
例えば
  • 並列処理
  • 複数プロセス間(複数アクセスに対してとか)のリアルタイムなデータ共有
とかはもう言語仕様としてそうなってるのでそこを超えるのは大変なのは当たり前なんだけど大変。
プロセス間通信が必要な処理とか書いてもCと変わらない。
(Cが簡単と言う人には簡単かもしれないけど僕は違った)
マルチスレッドとかもそうだけどこういうのはC#とかJavaで書いた方が幸せになれると思う。
(最近だとErlangなのかな?)
他にもinputとoutputがハッキリしててアクセスが多くて速度が重視するような場合(RESTAPIとか)はPHPで書くよりScalaで書いたが絶対幸せになれる。
WebSocket使うような非同期処理ならNode.jsとか使ったほうがいいと思う。
型安全とかもそうだけどプロダクトとしてそちらが適してるならそっちを使ったほうがいい。

ただPHPも得意なことはある。
シンプルなWebサービスを作るときは簡単だし高速。
開発環境はライセンス費を掛けずにIDEもあるしvagrantなどツールも充実してる。
TDDやBDDもできるしテストの自動化みたいなひと通りの流行りの事は出来る。
それとPHPは別にセキュリティが苦手なわけじゃない。
セキュアなWebアプリって観点だと最近のモダンなフレームワークでちゃんと作れば問題ない。
セキュリティに関しては言語関係なくセキュリティに対する知識とフレームワークやミドルウェア含めバージョンアップ出来る状態の維持が一番大事だと思う。

2. 保守性はコードも大事だけどデータも大事


コードの保守性も確かにとても大事なんだけどそれと同じかそれ以上にデータも大事。
具体的にはクソなDB設計の上には何を作ってもクソ。
例えばどんなに綺麗に設計してもtext型で巨大な文字列とか入ってると*を使うORMが死ぬ(速度的に)
他にも1テーブルに100カラム以上みたいなSQLアンチパターンがあるとクエリビルダでも死ぬ(つかSQLが死ぬ)
でアプリケーションの寿命よりデータの寿命の方が長いからデータの闇は深い。
あるあるネタだけど5年前くらいのアプリケーションのリプレース案件。
コードは綺麗に出来るけどデータは既存から持って来ないといけない。
そこで立ちはだかる数百のテーブルと複雑に絡み合うViewとトリガー…みたいなとき(この場合は担当者が死ぬ


ということでコードに対する向上心と同じようにデータ設計に対する向上心も持ってほしい。

2014年8月4日月曜日

IT勉強会について本気出して考えてみた

なんか広島が誇るスーパーハッカーひむらさん(以下:ひむひむ)が広島の未来に憂いてるみたい。

地方のIT勉強会ってこのままで大丈夫なのかな


僕から見たひむひむはこの一年で中国地方を代表するエンジニアのポジションを築き上げたのは間違いない。
元々彼自身に色んな魅力があった上に彼の行動力で為した結果だと思う。
そこに大きな影響を与えたのはオープンセミナー広島やすごい広島を始めとする勉強会の存在。
そんな彼だからこそ勉強会の良さとか大切さとか、そしてこのままでは無くなっていく危機感みたいなモノを感じてるのかなと思う。
実際にそれは勉強会ブームの終息と共に僕も強く感じてる。
例えば去年、こんな話題でJJUG CCCに登壇させていただいた。


■当日のTwitterまとめ
JJUG CCC 2013 Spring R2-6 [BOF] 地方における勉強会事情

■当日のふりかえりブログ
JJUG CCCに参加&セッションしてきた

■当日の資料



僕はこの資料のとおり、勉強会はコミュニティに育ててもらってるしすごく楽しいものだと思ってる。
だけどこの前後くらいからゲーセンの格ゲーと同じ「緩やかな死の足音」みたいなモノを感じてた。
実際に今まで主力で勉強会に来てた人が少しづつ勉強会から離れてる。
例えば


  • 結婚したり子供が出来た
  • 転職等で遠方に転居した
  • コミュニティの取捨選択の判断が厳しくなった
  • 交友関係が成熟していて発展がなく、勉強会として集まる必要があまりない
  • そもそも勉強会に対するリソースやコストが割に合わない


などなど。
他にもいっぱい理由があると思うけど何らかの理由で人は減ってる。
で更にこの後、Twitterでこんなことがあった。

Twitterまとめ - 勉強会について本気出して考えてみた

この時、第二回 中国地方DB勉強会は正直コンテンツとかタイミングとしては自信があった。
(どれくらい自信があったかと言うと100人入る部屋借りたくらい)
だけど結果としては思ったよりも集客は少なかった。
これは

・ターゲットに対するアプローチが下手だった
・コンテンツの魅力を自分が伝えきれなかった
・そもそもDBというコンテンツ自体がみんなの興味を獲得できてないのかもしれない

などなど他にも沢山色んな理由があるんだろうけど僕は

とりあえずで勉強会に参加してくれる時代は終わった


つまり勉強会ブームは完全に終わったって思った。
これは格ゲー時に既に通った道だったのですごくハッキリと感じた。
なのでこのまま放っておくと参加者の新陳代謝は無くなってどんどん人が減っていくと思う。
そこでこの時も言ったけど


と思ってる。
実際にゆるふわ系というか身内にまったりやる集まりはそれなり見かける。
だけどそれだけじゃあ勿体無いと言うか緩やかな死は止めれないと思ってる。
そこで自分が考えた一つが次のとおり。

1. 参加者の新陳代謝を上げる

そもそもなぜ僕がお金が使える勉強会も必要だと思ってるか。
まず色んなスタイルで色んな人が楽しめれば良いんだけど本当に聞きたいこと(日頃経験してない知識)って一日じゃあなかなか手に入らない。
だからやっぱすごい人に教えてもらうのが手っ取り早いしそういう情報を仕入れるアンテナを作る必要がある。
それに一番効果的なのは勉強会にその手の達人を呼んでコネクションを作ること。
(インプットを育てる)
その次に大切なのが自分のアウトプットを増やして知識の定着をすること。
だからまずビックスピーカを呼ぼう!!
ってのが建前。
実際のところ、兎にも角にも参加者の新陳代謝の活性化には新しい参加者が必要。
そこで勉強会に来たことが無いような人が来るきっかけになるような強い動機にはやっぱ

  • 即実践投入できる知識や経験の取得(ハンズオンとか)
  • 名前や概要を見ただけで聞きたくなるようなスピーカー

みたいなわかりやすい魅力だと思ってる。
(当然他にも 勉強会の色気 を出すような工夫も日々必要だけど)
そこで遠方の講師を呼ぶってなると最低限、交通費と宿泊費はかかる。

# いつもノーギャラで来て頂いてる皆様。
# そしてボランティアでやってくれてるスタッフの皆様
# 本当にありがとうございます。

で実際にそういう人たちに来てもらうセミナーとかは3000円~5000円とかする。
例えば第1回 中国地方DB勉強会の例を取ってみるけど

■第1回 中国地方DB勉強会
※当日の内容は動画も資料もあります

■関東の講師(この時は奥野さん)を呼ぶ
・交通費 約4万円
この時、奥野さんは宿泊費しなかったけど宿泊費する場合はいつも上限1万円で宿泊費も出す

■設備費
・会場費 4,280円+ 通信費 600円
大学の施設や県の施設を借りると安く済むので助かる
(この時は県の図書館を借りた)
広島市内で100人近く入る会場(例えばRCC文化センター)を一日借りると5万とか超えちゃう。

これは大垣さんには大変申し訳無かったけど交通費自費で来てもらった上でこの状態。
スタッフのみんなも交通費とかボランティア。
で参加者はスタッフ抜くと13人くらい。
単純に人数で割ったらこれでも参加費3000円超えちゃう。
こうやって考えると有料セミナーの参加費が3000円~5000円かかるのは適正価格だ。
しかも実際に地方から東京に行ってセミナーを聞く交通費を考えると格安だ。
と考えてくれるのは訓練された勉強会参加者だけ。
ちょっと興味があるくらいの人に3000円なんてハードル高い。
中国地方DB勉強会だって地元の人が参加費3000円だと参加しただろうか?
だから参加費はできるだけ低価格に抑えたいのが運営側の本音。
そうなると自腹を切るリスクとか大量の人数動員が必要になったりとかで本当にハードル上がる。
そこでお金を使える勉強会の存在が大事になってくる。
例えば中国地方DB勉強会はJPUGが予算出してくれるからコミュニティの援助のお陰で参加費を0円に抑えれてる。
オープンセミナー広島オープンセミナー岡山は地元企業の協賛のお陰で参加費を0円。
こういう勉強会の実績をどんどん積み上げて勉強会を支援する動きがもっと活発になってくれば色んな取り組みが出来るようになるはず。
例えばTDDBCなんて超素晴らしいイベント。
だけど今年は開催されない…
(スタッフではないので詳しい理由は知らないので下記はあくまで推測)
例えばハンズオンは講師(TA)の数が必要になるし準備も大変だ。
さらに参加費で予算を賄うのであれば運営のリスクも大きい。
だから毎年大体的にやるのは大変だと思うので仕方ないと思う。
(TDDBCなんかは何回も参加するイベントでも無いので母数が少ないと需要がなくなるの早いし)
でもこれを支援する仕組みがあったら来年は開催されるかもしれない。
そしてそういう仕組を作るための基盤作りを今自分は頑張ってるつもり。
そしての基盤作りの中で新規の人が来るきっかけ作りをしてる。

2. 勉強会に来てもらった人を育てる

お金のかかった勉強会に来てもらった。
そしたら次はもっと勉強会を好きになってもらう必要がある。
そういう時にゆるふわ系の勉強会はすごく重要なポジションになってくる。
あの身内で同じ趣味の話をしてる時間は至高の時間と言っても過言じゃない。
だからそういう勉強会もすごく大切だと思うしそんなイベントの方が楽しいとさえ思う時がある。
そしてそういうのはひむひむがすごい頑張ってる。
だから僕は人を集めたら今度はひむひむのようなコミュニティに上手く誘導する必要がある。
なので僕は中国地方DB勉強会はPostgreSQLに限らないしエンタープライズもWeb系も題材に取り上げて色んな人に来てもらうし色んなコミュニティへの橋渡しをしてる。
中国地方DB勉強会やオープンセミナー以外の他にもWeb Touch Meetingとかオープンソースカンファレンス@広島とかそういう集客の要素と橋渡しの要素がすごくあると思う。
そういう橋渡しを行いながらもっと勉強会を楽しむ人を増やして参加者の滞在率を伸ばしたりする必要がある。
そういう場所に来るのは100人集めて1人かもしれない。
だけどその1人が居なくなったらそれこそ緩やかな死から末期の状態になっちゃう。
だから懇親会だったり、日頃のコミュニケーションだったり、色んなところで何らかの楽しさが芽生えてほしいしそういうきっかけ作りは大事だと思う。
そういうところは岡山のコミュニティは上手だなって思う。

3. コミュニティ(勉強会)の一部になってもらう

一番わかりやすいのはスタッフ。
でもスタッフだけがコミュニティの一部じゃない。
ブログを書くまでが勉強会とか言ったりするけど「○○勉強会に参加しました!めっちゃ面白かった!!」ってブログ書くだけでもコミュニティの一部。
それを見た他の人は興味を持つし、それを見つけたスタッフは嬉しくてその日のビールは旨さ10倍。
そしてそんなコミュニティへの関わり方で一番簡単なのはひむひむ言う通り、イベント情報の拡散だと思う。
ひむひむも言ってるけどSNSでは今は色んなシェアの仕方もある。
僕はもっとレイヤー低くていいと思ってて職場の昼休憩の話題にしてくれるだけでもいい。
他のイベントとか飲み会でちょっと話のネタとして話題に出してもいいかもしれない。
他にもTwitterで話題が出た時にちょっとリプを飛ばし合うのも良いと思う。
そういう積み重ねが1をやってる自分や2をやってる人達の助けにすっごいなる。
だからひむひむはもっとみんなにコミュニティの一部になって貰いたいんだって伝えたかったんだと思う。




ということで感情に任せて一気に書いたからまとまってないけど無理矢理まとめる。
僕にはひむひむのような求心力はないけどコレを見てた人が少しでも自分たちの楽しい居場所とか好きな事について考えてくれたらなって思う。
今回はIT勉強会が軸だったけど実はこれは結構色々当てはまる。
例えば僕の所属する日本PostgreSQLユーザ会だってそう。
先輩方のすごい努力で日本のコミュニティとしてすごく大きいコミュニティになってる。
でもデータベースエンジニアって若い人が全然足りないからコミュニティの平均年齢がどんどん上がってる。
10年後、コミュニティが今と同じ状態になってるか正直わかんない。
だから僕は育ててもらってるコミュニティの恩返しの一つとして勉強会を通してJPUGの新陳代謝の活性化を目指してる。
他にも冒頭で触れた昔ながらのゲーセンとかもうほんとヤバイ。
どんどん潰れて無くなっていて地方だと絶滅危機種。
雀荘とかも今は随分見なくなったよね。
こういった事に流行り廃りは絶対あるんだけどその中で自分が好きな場所とかこれは大切だって思う事に対してはみんなもっと積極的になったほうがいいと思う。

と全然まとまって無いけどまとめとしてはこんな感じ。

2014年7月24日木曜日

第四回 中国地方DB勉強会を開いてきた

第四回やって来ました。
そして中国地方DB勉強会は皆様のおかげで1年が経ちました。
今回もJPUG主催で行いましたが今回はクレオフーガハーレムさんの希望でチューニングをテーマに行いました。
またクレオフーガはMySQLをメインに使っているので今回はMySQLとPostgreSQLにフォーカスしました。
それと前回好評だったハンズオンも行いました。
個人的には非常に充実した一日で大満足です。
ただハンズオンの準備や細かいコンテンツの調整は大変でした。
無事成功したのは講師の喜田さんと山﨑さんのおかけです。
本当に色々とご協力してくださりありがとうございました。

そしてそんな第四回の詳細は次のとおりです。

■登壇資料など

中国地方DB勉強会のポータルサイトにまとめました。
http://dbstudychugoku.github.io/events/event-004.html

また当日のハンズオンの資料の中に
  • MySQLパフォーマンスチューニング概要.txt
  • サブクエリ最適化の検証.txt
という資料で講師の山崎さんが纏めてくださっています。
MySQLのチューニングに関するTIPSが載っています。
また喜田さんのPostgreSQLの資料は非常に良くまとまってます。
PDFなのでダウンロード必須です!!


■メーリングリスト

次回の告知についてはMLやDoorKeeperを使います。
興味がある方はチェックしてみてください。

中国地方DB勉強会ML Google Group
dbstudychugoku@googlegroups.com

DoorKeeper


■動画とtwitterのまとめ

今回はUstream配信はありませんでした。
Twitterについては@razonさんがまとめてくれています。

第4回 中国地方DB勉強会 in 岡山 まとめ #ChugokuDB



■第四回のアンケート募集中

当日に参加やUst拝見された方は下記のアンケートに答えてくださると嬉しいです。
次回のコンテンツや今後の運営に活用させて頂きます。

アンケートはこちら
※匿名アンケートです


■MySQL Workbench 6.1.7(最新版)のバグについて

勉強会でご紹介したビジュアルEXPLAINに関してバグが見つかりました。
MySQL Workbench 6.1.7(最新版)で、

・ビジュアルEXPLAINが取得できない

というバグが存在しました。
現時点で、ビジュアルEXPLAINを使用するためには、古いバージョンの(MySQL Workbench 6.1.6以前)を使用頂ければと思います。
また、本バグは既にバグ登録されており、開発者が対応中です。
以下のバグ報告サイトにアクセスして右側にある「Affects me」をクリックして頂ければ、開発者にバグで困っている人が多くいることを伝えることができますので、よろしければ
クリックして頂ければ幸いです。

http://bugs.mysql.com/bug.php?id=73256


■第5回 中国地方DB勉強会

日時:2014年9月21日(日曜日)
会場:広島県広島市中区大手町1-5-3 サテライトキャンパスひろしま 501号室
内容:各データベースのトラブルシューティングについて

  • ※セッション対象予定
  • PostgreSQL(確定)
  • MySQL(講師交渉中)
  • OracleDB(確定)
  • SQLServer(確定)
  • MongoDB(オライリージャパンのMongoDBインアクションの翻訳者の玉川竜司さん!)

以上のように考えています。
既に各DBの講師に依頼をかけており、豪華講師陣になりました。
今回はハンズオンはありませんが実際のDBAや開発者にとってかなり充実した内容になると思います。
また始めて有償DBのエンジニアやNoSQLのエンジニアの講師をお呼びしております。
交流含めて是非参加をご検討していただけたらと思います。

申し込みサイトが出来ましたらMLやDoorKeeperで告知します。
ご興味がある方は上記のMLとDoorKeeperにご登録してみてください!!


■オープンソースカンファレンス2014@広島

第5回 中国地方DB勉強会の前日に同会場で次のとおり行われます。

日時:2014年9月20日(土曜日)
会場:広島県広島市中区大手町1-5-3 サテライトキャンパスひろしま

http://www.ospn.jp/osc2014-hiroshima/

こちらにJPUGも出展致します。
また多くのエンジニアが一同に集まる大きなイベントです。
こちらも合わせてご参加をご検討していただきますようお願い致します。

と以上のとおりです。
そして今回のハンズオンは喜田さんの書かれた次の本を使いました。



この本、中を拝見しましたがかなりいいです!!
僕はこの勉強の後に買いました。
何が良いって
  • SQLの書き方のHow Toが書かれてる
  • しかもDB別でOKとNGの両方が書かれてる
  • 要所でDB間の違いやオプティマイザ等の動きの説明がある
点です。
やはりただ一つのやり方を知るよりも複数のアプローチを知っている方が応用が効きます。
更に他のDBとの差を知ることでより深く知識の研鑽になると共に記憶に深く根付きます。
特にMySQLとOracleとPostgreSQLと言う3大DBですから実務で出会うことは多々あるでしょう。
なので自分の得意なDBでは○○って書くけどOracleの時はどうすんの?みたいなときも非常に助かります。
ということでコレ本オススメです。


ということで第四回は非常に充実した内容でした。
次回はセミナー中心でハンズオンはありませんが超豪華講師陣です。
すでに今から楽しみで仕方ないです!!
次回も皆様と勉強会でお会いできるのを楽しみにしております。

2014年7月6日日曜日

PHPライブラリ&サンプル実践活用[厳選100]はすごく良い

タイトルの本読みました。




WINGSプロジェクト←こちらで本の概要がわかります

正直こういう本は一周遅れとか二周遅れの事が多いです。
それが呼んでびっくり バリバリ現役の内容 です。
で具体的に何処がいいかですけど

1 環境構築→インストール→利用までがしっかり流れでまとまってる。

実際にライブラリを調べる時はPHPerだとWebの情報を元にすることが多いと思います。
その際に


  • 環境構築のサイト
  • インストールのサイト
  • 使い方のサイト


をそれぞれ探して来て順にブラウザのタブを行き来しながらやる煩雑さ。
あれがありません。
ヘタすると使い方もバージョン依存だったりでハマり、それだけで何サイトも巡る...
そういうコストが全くないというのはストレスフリーですよね。
更に言うとGithubだったりComposerに対応してるものはそちらで紹介されています。
こういモダンなやり方を始めるきっかけとしてもいいと思います。

つかGithubは言わずもがな、ホントComposerはマジ便利なんでオススメです。
さらにさらにさらに!!
公式サイトからサンプルコード落とせます!!

サンプルコード

これは非常に助かる。
写経も勉強になるんだけど実際に使うときに書き直すのは億劫です。
でもサンプルコードがあるので

2 即実戦投入出来るサンプル

これはPHPに限らずライブラリあるあるなんですけど

Hello Worldが出来たらOK!

みたいな紹介サイトよく見かけます(ブーメラン)
この本はもう一歩踏み込んだところまでサンプルになってます。
グラフだと一つだけじゃなくて棒グラフだったりレーダーだったり。
しかも一つじゃなくて複数のライブラリを紹介することで

利用用途によって最適なライブラリを選定できる

ってのが強いです。
PHPの良い所でもあり難しいところに「どれを使えばいいのかわからない」ことあると思います。
そんなときHello Worldレベルだと違いがわかりません。
ですが一歩踏み込んだ紹介を複数個用意してくれてるので選定が非常に捗ります。
さらに試すときもインストールから実践までがまとまってるので動かすことがすぐ出来ます。
これで実際に「こんな事がしたいんだけど出来る?」っていう質問に「あーそれならあのライブラリ使えるんで○○時間くらいで出来ますよ。」と即答出来るようになるはずです。
「あーちょっとやってみないとわかんないです...」とか「やってみたら思った以上にハマっちゃって時間がかかりそうです...」って言うのとは全然違いますよね。

3 紹介されてる内容がイケてる

どんなに丁寧に紹介されてても実際に使うシーンが無ければ無駄知識です。
でもこの本は安心していいです。
WINGSプロジェクトの目次を見ても分かる通り、求められたシーンがあると思います。
さらにGoogleやAWSのAPIのように知ってると引き出しが広がるAPIも沢山紹介されてます。
実際に僕が使ったことがあるAPIやライブラリが多数紹介されてました。
逆に僕がこの本を読んで使い始めたライブラリも沢山あります。
列挙だけ紹介しますと

  • Faker(テストで使うようないい感じのダミーデータを作ってくれます)
  • PHP GitHub API(GitHubのリポジトリを参照したりできるので自動化が捗る!)
  • PHP Markdown(Marcdown形式をhtmlにしてくれる)

なんかがあります。
WebAPI系なんかは「おっコレ今度使ってみよ!」みたいなのが結構ありますね♪
またPHPUnitみたいな日頃から使ってるツールでも知らないことがあったり発見がありました。
家に置いてもよし、会社に置いても良しの一冊だと思います。





だたちょっと残念だなって思うところもあります。
例えばフレームワークについて。
これはそれぞれで1冊の本になるレベルですので仕方ないとは思いますがやっぱ紹介程度です。
なのでフレームワークは最近の流行りを知れる程度だと思います。
ただこの中で出てくるFuelPHPに興味がある方は以下の本がオススメですよ。

はじめてのフレームワークとしてのFuelPHP第2版

FuelPHPに関しては今一番まとまったシリーズです。
モダンなPHPの開発手法も網羅されてるのでフレームワークの外の部分でも勉強になります。

ということでこの本を見て開発意欲が刺激されたので何か作ってみようと思いました。
またこの本は会社に置いて都度参考にしようと思います。

2014年6月21日土曜日

デジタルサーカスに遊びに行ってきた

東京のお高いおしゃれの街青山にあるデジタルサーカスさんに遊びに行って来ました。

デジタルサーカス

そしてデジタルサーカスさんですが兎にも角にも

おしゃれ!

これですね。
応接間も綺麗ですしお仕事場も広くて個々の机もゆったりでした。
そしてデジタルサーカスに行った理由は@tomzohさんにお会いするためです。
@tomzohさんは新卒からずっとデジタルサーカスを支えてきたエンジニアの方で

CakePHPを使う人は是非とも読むべきレシピ本


の著者の方です。
@tomzohさんは非常に相手を引き出すのが上手でした。
僕が話を聞きにお伺いしてるのに気付いたら@tomzohさんに上手く転がされてました^^;
さらに


  • SNSを利用方法
  • エンジニア採用
  • 仕事を上手く回すポイント


については非常に含蓄が多い意見を聞かせていただきました。
デジタルサーカスさんは創立して15年と業界からすると老舗です。
やはり老舗なだけあって色々と「上手くいくには理由があるな」と感じましたね。
今後もデジタルサーカスさんは安心できる受注開発業者として大活躍すると感じました。

それと蛇足ですがスパ4で対戦しました。
かなりボコボコにされてセンスを感じさせる内容でした^^;
頭がキレる人は格ゲーが強いの持論はまた立証された結果ですねw
起き上がりの移動投げ対策を含め、ウル4ではケン対策しっかりしようと思います><

クレオフーガ(岡山)に遊びに行ってきました

先日(6/20)にクレオフーガに遊びに行ってきました。

クレオフーガがといえばキムキムを始め、イケてるRubyエンジニアが集まってるのが特徴です。
実際にOSH2014の実行委員長だった@mako_wisさんがcodeをバリバリ書いてましたね。
でクレオフーガに遊びに行って感じたことは


  • 女子大生がそこら中にいる
  • CTOの山口さんが非常にフレンドリー
  • 岡山大インキュベーションセンター内での繋がりも大事にしてる
  • 女子大生多い(大事なことなので二回言いました
  • 山羊がいる


と言う感じでした。
岡山大インキュベーションセンターは岡山の企業からするとかなりアツい選択肢でしたね。
またクレオフーガの「敢えて岡山でやる!」ってスタイルは素晴らしいと感じました。
今の開発体制は


  • 立地場所によるデメリットがすくない
  • 社員のコストが少ない(物価が安い
  • 東京と違って地震ない←


などのメリット以外にも


  • 競業他社が少ないので目立ちやすい
  • 他業者との繋がりが強い
  • コミュニティの力を借りたり援助が非常に効果的


とのこともおっしゃっていました。
そんな中では一番は

サービスが流行らなかったら会社が無くなる覚悟でやってる


って仰ってて「そりゃ勢いあるはずだわ」と納得の一日でしたね。
今後も岡山からのクレオフーガの勢いは止まりそうにないですね。

2014年6月5日木曜日

PHPでCSVから配列を作る

前回のエントリーで

symfony2でCSV出力(ダウンロード)する


を紹介したので対のCSVをArrayにするmethod置いときます。

public static function csv_string_to_array($csv_string)
{
    mb_language("Japanese");
    $buf = mb_convert_encoding($csv_string, 'UTF-8', "auto");
    $replace_buf = str_replace("\r\n", "\n", $buf);
    $lines = explode("\n", $replace_buf);

    $filter_lines = array_filter($lines);
    foreach ($filter_lines as $line) {
        $ret[] = str_getcsv($line);
    }
    return $ret;
}
改行を一度\nにしてからexplode()してます。
explode()を利用した理由は可読性がいいからです。
速度的にはループと大差ないです。
array_filterは空行を削除してます。
なので

1,2,3


2.3.4

みたいな時は間と末尾の空行を削除します。
あとはstr_getcsvで行の内容を取得します。

あと蛇足ですがなぜスネークケースかと言うと

PHPはmethod名の大文字小文字を見ない

ので_区切りにしてます。
現場からは以上です。

symfony2でCSV出力(ダウンロード)する

symfony2シリーズ第3弾です。
CSV出力、何かと言われて実装することが多いのではないでしょうか。
FuelPHPではRESTコントローラがCSV対応しており、配列渡すだけなので久しぶりに実装しました。
と言っても良くある実装なのでsymfony2でActionで呼ばれた時の場合でご紹介します。

public function exportAction()
    {
        $header = [
            'ID',
            '名前',

        ];
        $list[] = $header;
        //DBから呼び出した場合はgetArrayResultを使うか自分で$dataを整形して下さい。
        $list[] = [1,'hoge'];
        $list[] = [2,'fuga'];

        $csv = $this->convertArrayToCsv($list);

        $response = $this->render(
                "AcmeSampleBundle::export.html.twig", [
            'csv' => $csv,
                ]
        );

        //Excel対策でUTF-8からSJIS-winに変換
        $contents = mb_convert_encoding($response->getContent(), 'SJIS-win', 'UTF-8');

        //headerのSET
        $response->headers->set('Content-Type', "application/octet-stream; name=hoge.csv");
        $response->headers->set('Content-Disposition', "attachment; filename=hoge.csv");
        $response->setContent($contents);

        return $response;
    }


    //配列をCSVに変換。
    //文字列のエスケープをしてくれるのでfputcsv()を利用
    private function convertArrayToCsv($list)
    {
        $fp = fopen('php://temp', 'r+b');
        foreach ($list as $fields) {
            fputcsv($fp, $fields);
        }
        rewind($fp);
        $tmp = str_replace(PHP_EOL, "\r\n", stream_get_contents($fp));
        return $tmp;
    }

表示するTwig側(例ではexport.html.twig

{{ csv|raw }}

としてます。
rawを使わないとcsv内のクォートなどをエスケープするので忘れないでください。

CSVから配列にする場合のメソッドはこちらです。

PHPでCSVから配列を作る



2014年6月4日水曜日

twigとPHPとSQLでの年齢計算

年齢計算は良く出てくることなんだけどTwigでやる時のメモ。


Twig

TwigにはPHPの関数が使えないので計算で出します。
birthdayには日付型のデータが入っているとして

{% set age = "now"|date('Y') - birthday|date('Y') %}
{% if ("now"|date('m/d') < birthday|date('m/d')) %}
    {% set age = age -1 %}
{% endif%}

で出ます。

(今年 - 誕生日年)


をして年を外した日付で比較して誕生日が来てなかったら1引くというロジックですね。

PHP

PHPはtime()で引き算したりいろいろあるのですが個人的に一番好きな方法をご紹介します。
ついでにDateTimeクラスのdiff()は5.3以降のPHPじゃないと動きません。

$birthday = new \DateTime("'2014-06-04'");
$now = new \DateTime();
$interval = $now->diff($birthday);
$age = $interval->y;

MySQL

MySQLはTwigと同様に計算で出します。

SELECT
  (YEAR(CURDATE()) - YEAR(birthday)) - (RIGHT(CURDATE(), 5) < RIGHT(birthday, 5)) AS age
FROM
 member

PostgreSQL

PostgreSQLにはage関数があります。

日付/時刻関数と演算子

なので単純に

SELECT
 age(now(),birthday)
FROM
 hoge

で差分の日付型が帰ってくるので頭の年を取得して。

SELECT
 extract(year from age(now(),birthday)) AS age
FROM
 hoge

こんな感じです。
むしろPostgreSQLはFrom句が無くても動くので

SELECT extract(year from age(now(),date '2013-06-04'))  AS age

SELECT extract(year from age(now(),now() + '-10 year'))  AS age

とか動きます。
と言うことでよく使う年齢の計算方法でした。

2014年5月8日木曜日

FuelPHPでセキュアな設定をする

FuelPHPをお仕事で使う方も増えてきたと思います。
そんな中で気になるのはやはりセキュリティ。
ということで今日はFuelPHPでセキュアな状態にするための設定を書きます。
まず

@kenji_sさんの下記のブログが非常に分かりやすく書かれています。
今日はこれ以外の下記の項目について書きます。

  1. DBにセッションを保存
  2. 変更推奨のセッション情報
  3. https時にCookieにsecure属性を付与

1.DBにセッションを保存

defaultはセッションをクッキーに保存しています。
これをDBに変える情報は公式ドキュメントにあります。

FuelPHP公式ドキュメント 1.7

DB以外にも

  • File
  • Memcached
  • Redis

などが選べます。
DBを使う際にMySQLの方はいいのですがPostgreSQLを使う方は

#reate the sessions table
$ php oil r session:create

が動きません。
なのでCREATE文と設定方法をご紹介します。

まず

fuel/core/config/session.php



fuel/app/config/session.php

にコピーします。
次に fuel/app/config/session.php のdriverの項目でdbを指定します。

'driver'  => 'db',
次にdbにセッション専用のテーブルを作成します。
下記SQLで作成できます。

--PostgreSQL用
CREATE TABLE sessions
(
session_id character varying(40) NOT NULL,
previous_id character varying(40) NOT NULL,
user_agent text NOT NULL,
ip_hash character varying(32) NOT NULL DEFAULT ''::character varying,
created integer NOT NULL DEFAULT 0,
updated integer NOT NULL DEFAULT 0,
payload text NOT NULL,
CONSTRAINT sessions_pkey PRIMARY KEY (session_id),
CONSTRAINT sessions_payload_key UNIQUE (payload)
)
WITH (
OIDS=FALSE
);
ALTER TABLE sessions
OWNER TO ユーザ名;

これでセッションをDBに保存するようになります。

2.セッション時間の変更

セッション利用する際に変更推奨の項目です。
1.でcopyしてきた

fuel/app/config/session.php

の項目に

//セッションIDを保存するCookie名
cookie_name

があります。
こちらはdefaultの名前ではFuelPHPのどのdriverを使ってるかがわかります。
セキュアな環境を求められる際は変更した方が良いと思います。
似たような設定にCSRF対策時に利用するkey名があります。
こちらは

app/config/config.php

のSecurityの項目の

csrf_token_key

の項目で変更できます。

それ以外にもsession.phpには

  • expiration_time
  • rotation_time
  • match_ip
  • match_ua

などセキュアにセッションを扱うための設定があります。
defaultはゆるく設定されていますので要件に合わせて設定を変更すると良いと思います。

3.https時にCookieにsecure属性を付与

httpsの際にCookieにsecure属性をつけていないと盗聴される可能性があります。

PHP と Web アプリケーションのセキュリティについてのメモ

Cookie の secure 属性


セキュリテイについては安定の徳丸さんの記事を御覧ください。

徳丸浩の日記

HTTPSを使ってもCookieの改変は防げないことを実験で試してみた


FuelPHPはdefaultでは付与していません。
ですが設定一つで対応できます。
設定箇所は

fuel/app/config/config.php

'cookie' => array()

を有効にし

'secure' => false,



'secure' => true,

と変更します。
これでsecure属性を付与してくれます。
ただし、secure属性は

  • https通信時のみ Cookie の内容を送信
  • http通信時には Cookie の内容を送らない

というものですのでhttpでアクセスした際はCookieの内容を送信しません。
ですのでhttp通信時はセッションの保持もCSRFも正常に動作しません。
(本版環境はhttpsだけど開発環境はhttpの場合などでハマるポイントですね)

以上の3点が本番リリース時に気にする項目だと思います。
FuelPHPとは関係ないですがヘッダー情報でphpとapacheのバージョン情報が分かります。
こちらはapacheのhttpd.confやphp.iniを修正する必要があります。

■apacheの場合
・対象File
CentOS:/etc/httpd/httpd.conf
ubuntu:/etc/apache2/conf-enabled/security.conf

・変更箇所
ServerTokens Prod
ServerSignature Off

■PHPの場合
・対象File
php.ini

・変更箇所
expose_php = Off

となります。
上記と合わせて設定をご検討していただけたらと思います。


ということでFuelPHPのconfigは色々と設定出来るので一読すると面白いと思いますよ!!

Symfony2でDoctrine2使う時によく使うEntityのアノテーション一覧とDoctrine2のコマンド一覧

Symfony2シリーズ第二弾です。
Doctrine2はアノテーションでEntityの関係や属性を指定出来るので便利です。
ただドキュメントが英語だったので自分用によく使うヤツをまとめて置いときます。

公式ドキュメント(アノテーション一覧)

/**
 * UNIQUE制約のIndexを作るとき
 * nameを指定しない場合はIDX_6E72A8C13B66675Bのように種類_ランダムの名前が付けられる
 * @ORM\Table(name="テーブル名", uniqueConstraints={@UniqueConstraint(name="キー名", columns={"カラム名"})})
 * 複数指定もできる
 * @ORM\Table(name="テーブル名", uniqueConstraints={@UniqueConstraint(columns={"カラム名", "カラム名"})})
 *
 * Indexを指定したい時
 * @ORM\Table(name="テーブル名", indexes={@index(columns={"カラム名"})})
 * 複数指定もできる
 * @ORM\Table(name="テーブル名", indexes={@index(columns={"カラム名", "カラム名"})})
 *
 **/
class テーブル名
{
    /**
     * ID
     *
     * @var integer
     * 
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * オートインクリメントの指定
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * ほげ(外部キー貼る側)
     * 外部制約(リレーションを指定するときは名前空間を指定すると補完が効く
     * @var \project\MyBundle\Entity\Hoge\Hoge
     * リレーションの指定
     * @ManyToOne(targetEntity="\project\MyBundle\Entity\Hoge\Hoge", inversedBy="hoge")
     * @JoinColumn(name="hoge_id", referencedColumnName="id")
     * */
    private $hoge;

    /**
     * ほげ(外部キー貼られる側)
     * 外部キー貼られる側も指定がいる
     * @var \Doctrine\Common\Collections\ArrayCollection
     * カスケードの動作等は貼られる側で指定する
     * @OneToMany(targetEntity="\project\MyBundle\Entity\Hoge\Hoge", mappedBy="hoge", cascade={"persist","remove"})
     * */
    private $hoge;
 
     /**
     * 登録日時
     *
     * @var \DateTime
     *
     * @Gedmo\Timestampable(on="create")
     * @ORM\Column(name="created_at", type="datetime")
     */
    private $createdAt;

    /**
     * 更新日時
     *
     * @var \DateTime
     *
     * @Gedmo\Timestampable(on="update")
     * @ORM\Column(name="updated_at", type="datetime")
     */
    private $updatedAt;
}

注意が必要なのはリレーションを定義するときは両方のEntityにアノテーションを記載する必要があります。
そしてSQL的にはカスケードの条件は外部キーを貼る側に記載しますがアノテーションは外部キーを貼られる側に記載します。
というよりも実際にカスケードの条件はDDLとしては付与されてません。
アノテーションでのカスケード処理はDoctrineが処理する際に行うだけで実際のDBのDDLには関与しないので注意が必要です。
同じようにdefaultやon="create"も同様です。
DDLとしてdefaultやtimestamp型が使われるわけではないのです。
このへんはDBとコードが不一致なので動作については注意が必要ですね。

それとDoctrine2のよく使うCUIコマンドです。

//DBの作成
php app/console doctrine:database:create

//エンティティの作成
php app/console doctrine:generate:entity --entity="MyBundle:Entity名" --fields="name:string(255) price:float description:text"

//ゲッター・セッターの作成
php app/console doctrine:generate:entities project名/MyBundle/Entity/エンティティ名

//全部のエンティティの作成
php app/console doctrine:generate:entities projectMyBundle

//テーブルの作成
php app/console doctrine:schema:update --force

//データの投入
php app/console doctrine:fixtures:load --env=test


Doctrine2でDBマイグレーションを管理すると環境の複製やリリース等が簡単になります。
またFuelPHP2.0でもDoctrineを採用するようです。
PHPフレームワークのDBのスタンダードになりつつあるのでDoctrine2を覚えておいて損はないと思います。
(NetBeansはDoctrine2対応していますしね!)


ということで今日のところは以上です。

Symfony2のTwigExtentionをからContainerやEntityManagerを呼び出す

Symfony2は重厚で大規模開発には非常に優秀だと思います。
そんなSymfony2ですがちょっと手の込んだ事を調べると日本語情報が少ない印象です。
英語の公式ドキュメントとstackoverflow.comを行ったり来たりした結果をメモとして残しておきます。

やりたいこと


  1. Symfony2でTwigExtentionを作る
  2. 作ったTwigExtentionのgetGlobals()からDBの呼び出しやサービスの呼び出しをする
  3. base.html.twigの変数にDBから取り出した値を使う。

この2.をするのに情報がなかったです。
1.については公式ドキュメントがありますのでそちらを参考にしてください。

カスタムTwig拡張の書き方


さて本題ですがTwigExtentionをサービスコンテナに登録しましょう。
その際に

# src/Acme/DemoBundle/Resources/config/services.yml
services:
    acme.twig.acme_extension:
        class: Acme\DemoBundle\Twig\AcmeExtension
        tags:
            - { name: twig.extension }

    arguments:
            em: "@doctrine.orm.entity_manager"
            container: "@service_container"

とargumentsとしてEntityManagerとContainerを渡します。
次にTwigExtentionクラスのコンストラクタに
public function __construct($em, $container)
    {
        $this->em = $em;
        $this->container = $container;
    }
と記載します。
あとはControllerと同様に各メソッドからDoctrine2のmodelを呼び出すだけです。
実際にbase.html.twigの初期値にDBから取り出したデータを使いたいときはgetGlobals()をオーバーライドします。
public function getGlobals()
    {

        $var = $this->container
                ->get('my_domain.hoge_repository')
                ->getHoge();
        return [
            'hoge' => $hoge,
            'fuga' => 'fuga',
        ];
    }
と言った感じです。
base.html.twigの拡張すればかなりDRYにすることが出来るます。
ただしTwigExtentionでDBを呼び出すと毎回呼ばれます。
ですので出来るだけ回数を減らす必要があると思います。

Symfony2シリーズ続くかわかりませんが現場からは以上です。

2014年4月30日水曜日

第三回 中国地方DB勉強会を開いてきた

第二回から少し間が空きましたが第三回を開催しました。
今回もJPUG主催で行いましたがDBの種類関係なくハンズオンを行いました。
詳細は次のとおりです。

■中国地方DB勉強会のポータルサイト

GitHub上に作ってます。

中国地方DB勉強会

■第三回のコンテンツ内容

第三回中国地方DB勉強会申し込みサイト

■メーリングリスト

次回の告知についてはMLを使います。
興味がある方はチェックしてみてください。
講師の資料についてはポータルサイトのまとめに添付されています。

Googleグループ

dbstudychugoku@googlegroups.com

■動画とtwitterのまとめ

今回は諸事情によりありません。

■第三回のアンケート募集中

当日に参加やUst拝見された方は下記のアンケートに答えてくださると嬉しいです。
次回のコンテンツや今後の運営に活用させて頂きます。

アンケートはこちら
※匿名アンケートです


と以上のとおりです。

今回は久々に登壇しました。




資料としては非常にシンプルです。
実際の設定や詳細を知りたい人は

  「Linux HA PostgreSQL」

とかで検索すると幸せになれると思います。
Linux-HA Japan様が本当に詳しく情報提供してくれてます。
pgpool2については公式の日本語ドキュメントがあります。
また作者の石井さんには色々と助けていただきありがとうございました。

そして開催した感想ですが今回は初めてハンズオンに挑戦しました。
内容は会員向けファイルダウンローダーサイトのDB設計です。
すっごいざっくりとした仕様と僕が作ったWebのモックを元に皆さんに設計していただきました。
DB設計に慣れてる方が多く、結果は綺麗な正規化ばかりでした。
なのでマサカリの投げ合いになることはありませんでしたね(残念
その中でも印象に残ったのは

  • ファイルのバイナリをDBに保存するチームは居なかった
  • DBユーザをロールで複数作るチームも居なかった
  • ハンガリアン記法(m_userとか)も居なかった
ことですかね。
僕は例では3つともした(だってViewとか作る時にv_hogeとかしたいじゃん!)ので僕の実装例の時に集中マサカリを受けました(震え声。
そりゃ血塗れになったので覚えてるって話です(涙目
他にも

  • みんな外部制約キーを設定してた
  • DB固有の機能はほぼ使われてなかった
  • 極端な設計(IDリクワイアドとか)もなかった

といった感じでした。
これは参加者が純粋にレベルが高かったと言う印象です。
逆に言うとホントは来て欲しいDB初心者にはまだ参加のハードルが高いのかなとも思います。
初心者の参加については次の回の課題ですね。
またバリバリのRails使いが居たりすると結果は違ったかもしれません。

このハンズオンとは別に話題に上がったのは

  • column順番拘るか
  • updated_atやcreated_atは必要か
  • 削除の扱いについて
  • 外部制約かけるとER図をリバース・エンジニアリングする時に楽

というのがありました。
この変は実装の文化の違いなどもあるでしょうから他の人にも聞いてみたいところですね。

といった感じで非常に濃い内容の勉強会でした。
特にハンズオンをきっかけに色んな人の文化や考え方に触れられたのは勉強になりました。
意見交換自体は毎回やるようにしたいと思います。
個人的にはDDLの管理(DBマイグレーション?)はみんなどうしてるのか知りたいですね。


以上が第三回のことですが第四回は次のとおりに考えてます。

○第四回 中国地方DB勉強会 in 岡山

■開催概要
日時:2014年7月13日か21日(予定)
会場:岡山駅周辺を検討中
内容:PostgreSQLとMySQLの実行計画の使い方とチューニングについて

をやろうと思います。
講師については調整中なのでどこまで細かいところまでフォロー出来るかはわかりません。
ですが初心者の方こそ参加して欲しい内容になっております。
また勉強会の最後に意見交換の時間を用意します。
ここで日頃の疑問や困ってることをぶつけていただけたらと思います。

詳細が決まりましたら随時MLで告知していきます。
ご興味がある方はMLに参加をよろしくお願いします。
また申し込みサイトはDoorKeeperを利用予定です。
そちらのコミュニティも合わせてご活用ください。

といった感じで次は7月です。
久々の岡山ですが既に楽しみな内容にワクワクしてます!
また次回もどうぞよろしくお願いします。

2014年4月20日日曜日

ソニックガーデンのオフィスに突撃してみた

納品のない受託開発で有名なソニックガーデンに遊びに行ってきました。

ソニックガーデン


ソニックガーデンに行った目的はただ一つ、そう!倉貫さんに会うためです!!

倉貫さんのブログ


倉貫さんと言えばやっぱりアジャイル!!
そしてソニックガーデンと言えば冒頭でも触れた納品のない受託開発ですよね。
そこで聞いて感じたところをまとめてみました。

■納品のない受託開発についてそーだい的な考察

1. ターゲット

スタートアップみたいな変化の多いサービスを作りたい人に向いてます。
さらに言うとサービス作りたくて技術以外にフォーカスしてる人が合うと思います。
何故ならば技術の部分はソニックガーデンが全て請け負ってくれるからです。

だから「より良いサービス作り」に集中出来る←←←

これって非常に大切なことですよね。
逆に「業務系のような一回作ったら終わり」なシステムには向いてないと感じました。

2. 対象期間

これは「サービスが終わるまで」です。
最後まで付き合う=手抜きをせずちゃんと付き合うってことです。
なので対応するエンジニアのスキルは勿論のこと折衝力とかマーケティングとか技術以外の部分の負担も大きいですね。

3. 関わるエンジニアからみたメリット

これはホント色々あるのですが「自分の時間を作れる」ことが最大のメリットと思います。。
納期が無いので自分で作業時間をマネージメント出来ます。
なので上手くプロジェクトが回れば自分の時間が沢山作れます。
その時間で書籍を書くもよし、OSSに貢献するもよし、自分のサービスを作るもよし。
まるでGoogleの80%ルールみたいですよね。
でもこれってエンジニアのモチベーション維持には非常に大切です。
納品のない受託開発のビジネスモデルって長い目で見てるから社員の定着率も大事です。
そう考えるとモチベーション維持はとても大事なテーマだと思うのですがそれが綺麗に吸収されてると感じましたね。



ざっとですがこんな感じです。
話を聞けば聞くほど面白かったですね!
しかも自社サービスの話も伺いましたがこれがまた面白い!!
でもこれは企業秘密な所も多いと思うので興味がある方は直接聞いて見るのがいいと思います。
中国地方近隣ではオープンセミナー岡山に登壇されます。
セミナーや懇親会で是非アタックしてみてください!!

オープンセミナー岡山 申し込み

オープンセミナー岡山 懇親会申し込み


そしてエンジニアの人で納品のない受託開発に興味がある人はギルドと言う選択肢があります。
これは要はソニックガーデンのやり方を教えてもらいながら仕事を請け負う形です。
上記以外にもキャッシュ・フローが安定するなど色んなメリットがあります。
ただし一緒にやる仲間になる以上、ソニックガーデンの水準に達する必要があります。
その水準は低くなく、誰でも簡単になれるものではないなぁと感じました。
ただ今、その水準になっている必要はなく「将来的にそのレベルに達する見通しがある」ならチャンスだと思います。
興味がある方は下記のリンクを参考にしてみてください。

ソニックガーデンギルド


ということでソニックガーデン。
色々言われるIT業界のビジネスモデルにおいて非常に参考になる例の一つだと思いました。
また渋谷に行った際は是非ともお話を聞かせていただきたいですね!!

2014年4月19日土曜日

クレオフーガにお邪魔してきました

今、岡山のベンチャー企業でノリに乗ってるクレオフーガに遊びに行ってきました!

今、岡山のITベンチャーが熱い

クレオフーガは音楽コンテストコミュニティ クレオフーガを運営する会社です。
詳しくは最近リプレースしたコーポレートサイトを見てください。




クレオフーガは東京と岡山にオフィスがあるのですが今回は東京にお邪魔してきました。
その目的はこの人、西尾さんに会うためです!!
僕の個人的な友人であるハーレムさんや真央ちゃんがいる会社なので「非常に楽しそうな会社だなぁ」って印象だったのですが「じゃあトップはどう考えてるのよ?」ってのが今回お会いしようと思ったきっかけ。
で実際にあってどうだったかと言うと
  • 社員がベストパフォーマンスを出せるように色んな配慮をしてる
  • 自社サービスを育てることに対して非常に論理的
  • 音楽に対する想いがアツい

特に自社サービスの話は聞いててためになりましたね。
ドックフーディングも「自分が音楽大好き!」って視点なので本当にサービスに対する目線がユーザ目線なんですよね。
また楽曲を提供してるユーザとご飯を食べに行ったり、ボタンの配置一つも試行錯誤してて

売れるサービスには売れる理由がある


って当たり前のことを凄く感じましたね。
ただ今後の課題としてはマーケティングとデータアナリストが不足してるみたいです。
そういうのが得意で音楽が大好きな人はクレオフーガの門を叩いてみるといいかもしれません。


そしてそんなクレオフーガさんが協賛してるイベントが来月あります。

オープンセミナー岡山


去年は西尾さんが登壇してました。
今年はクレオフーガのメンバーである逸見さんが実行委員長です。
興味がある人はイベントや懇親会に顔を出してみるのもいいんじゃないでしょうか。

ということでクレオフーガ、勢いに納得の内容でした!!

2014年2月3日月曜日

オープンセミナー2014@広島に行ってきた

年に一回の広島のビックイベントに参加してきました。

■当日のTwitterのまとめ
#osh2014のまとめ

■オープンセミナー2014@広島の公式サイト
オープンセミナー広島のサイト

■テーマ
「TDD…そして Be Agile」

今年も参加してきました。
去年は実行委員長として開催側でしたが今年は副委員長として一歩後ろから応援してました。
また久々にオープンセミナーで登壇してお話させていただきました。
当日の発表資料はこちらです。




資料の中で紹介したリンク先

AWSのPostgreSQL(RDS)を使えるようになるまでの手順

Webアプリケーションを作るときに知ってると嬉しいPostgreSQLの使い方

1 発表者として

アジャイル、TDDをテーマにしてる中で自分だけ全く違う内容でした。
また事前アンケートでは自分のセッションが参加理由の人はいませんでした。
なので今回の内容としてはDBのことを知らない人向けです。
DB大好きな人からするとあんまり魅力を感じない内容かと思います。
ですが全くニーズが無い場所こそ、DB(データの大切さ)を伝える必要があると考えています。
何故ならばデスマの技術的なボトルネックはコードではなくDBが一番多いと思ってるからです。
「私はDB担当じゃないから」とか「DBってストレージの代わりでしょ?」って人にこそ RDS for PostgreSQL ですぐ始めれるのでチャレンジしてほしいなと思います。

とそんな考えで登壇させていただきました。
ただ聴衆の皆様にどれだけ内容が伝わったかわかりません。
また登壇のやり方も正しかったかわかりません。
というわけで聴衆の方はぜひぜひフィードバックをよろしくお願いします。
厳しいお言葉こそ次の課題だと思います。
小さなことでもご意見ご感想をいただけたらと思います。

オープンセミナー広島のアンケート


2 運営スタッフとして

今年は火村さんが実行委員長でした。
その火村さんから副実行委員長として指名されて補佐を務めさせていただきました。
結論からいうと火村さんが素晴らしい活躍を見せ、僕の仕事はほとんどなかったと思います。
また彼はこの一年、沢山のアウトプットと人柄で多くのエンジニアから愛される存在になりました。
これは僕が去年、彼を実行委員長に指名した際の

「ひむひむはもっと評価されるべき」

という狙いを予想を遥かに上回る結果で達成したかなと思っています。
イベントとしてもこれだけの人を集め、問題もなく終えたのは大切な実績になったと思います。
本当に良いイベントだったなぁと贔屓目無しで感じる一日でした。
もう総括すると #ひむひむマジひむひむ コレに集約されるかなと思います。


3 参加者として

本当に含蓄のあるセッションばかりで非常に充実したものでした。
どのセッションも面白く、珍しくセミナー中にコーディングする暇がないくらい聞き入ってました。
その中でも特に自分の心に響いたのは長沢さんのセッション。
大切だなっと感じたこと列挙すると













そして他の人のツイートを拝借すると






ざっくり自分なりにまとめます。


  1. 継続的に成長できる会社文化がないと売上は伸びない
  2. でもそれって会社の人材の能力と文化に依存する
  3. だからこそ高いモチベを維持できる環境と能力を発揮できる環境が必要
  4. そのために政治力を含めて自分になにができるか?

つまりは



ですよね。
と以上を踏まえた上で自分が会社で


  • 出来てること
  • 出来る事
  • やりたいこと


を振り返ってより良い環境つくりを提案・実践していかなきゃと感じました。



と言う感じで非常に有意義な一日でした。
また懇親会ではLTも盛り上がり、Shake Handsさんの魅力と相乗効果で楽しかったです。
やっぱり懇親会での交流は大切ですね。


ということで何度も言いますが最高の一日でした。
来年がどんなイベントになるか今から楽しみですし絶対参加します。
このblogを読まれてる皆様、来年も(は?)会場で会いましょう!!!


※和田さんがオススメしてる本でAmazonで手に入るオススメ本