読者です 読者をやめる 読者になる 読者になる

pblog

pplog.net を作っている @ppworks こと越川直人(Koshikawa Naoto)のブログ

ホネーマワード紀行

久々に人前で発表をしました。「エンジニア×個の力をForward」というテーマのMoneyForward Meetupです。来月は45分枠の発表が2つもあるので、ちょうどよい肩慣らしになりました。

ホネーマワード紀行

前のお二人の発表タイトルに「奇行」と「寄稿」が入っていて、これは繋げねば!という謎のプレッシャーにより急遽タイトルに「紀行」を付けたのですが、奇しくも「マネーフォワード」に至るまでの私の人生の旅路がまとまった発表を上手いこと表した感じになり、結果的に良かったです。

2011年に某社でRailsを触り始めたのがRubyコミュニティへ関わるキッカケの一つとなったと言えます。その会社の合宿でFacebook APIを使ったRailsアプリを作り、herokuにdeployしたことで、当時の上司と繋がりのあった相澤さんからHeroku JP Meetup #3 : ATNDへ招待されたのが外へ出るキッカケとなりました。

Meetupの数日前に見たツイートをキッカケに、we love herokuをリリースすることになります。その際、使ったTwitter Bootstrapのtipsを書いた記事が軽くバズったりしました。

そこからアウトプットの癖が付き始めた気がします。

キッカケは、割とそこら辺に転がっていて、それを「チャンス」だと捉えられるかどうかが大事だと思いました。『仕事はたのしいかね?』で言うと、以下のあたりです。

  • もし宇宙が信じられないような素晴らしいアイデアをくれるとして、きみはそれにふさわしいかね?
  • きみはたぶん何十もの素晴らしいアイデアに、目の前を通り過ぎさせて来てしまっていると思うよ。
  • 僕たちはね、失敗するのを怖がりすぎて、それが宇宙からの贈り物だってことに気づこうとしないんだ。

仕事は楽しいかね?

仕事は楽しいかね?

振り返ってみると、一歩を踏み出す勇気が大事だったんだと思いました。外に出ることで視野が広まりました。

色々と試して来たので多くの失敗もしました。しかし学びが多かったです。例えば、起業は側から見たら単なる失敗にしか見えないと思いますが、あの経営経験は確実に今に活きてます。ブレない芯を言語化出来たのもその時の経験からです。

MF時代のppworksについて

パネルディスカッションでの質問の一つに、「MF時代のppworksについて」という質問がありました。ちょうど良いタイミングで、同日に公開された記事があるので、それを紹介します。私が取り組んできたことを体系立てて整理してみたら、それは戦略として繋がっていた事に気付かされました。

もはや月並みとなった表現で表すと、Connecting the Dotsってやつですね。組織の中で裁量を持って働くことで視座が高まりました。

「働く仲間を増やすために魅力的であれ」

せっかくメディアへ寄稿するということで、結城先生の書籍にお世話になりつつ、いつもよりも丁寧に文章を練ってみました。

数学文章作法 基礎編 (ちくま学芸文庫)

数学文章作法 基礎編 (ちくま学芸文庫)

数学文章作法 推敲編 (ちくま学芸文庫)

数学文章作法 推敲編 (ちくま学芸文庫)

この記事を元にした発表を2016年12月15日に行います。興味のある方はぜひお越し下さい。

Rubyビジネスセミナー Rubyの導入とエンジニア組織の作り方 - Rubyアソシエーション | Doorkeeper

冒頭で触れた45分枠の発表のうちの一つです。

『取締役の心得』という本を読んだら『論語』を読み出してた。

取締役の心得

取締役の心得

最近、取締役という立場について興味を持っている。経営者とは違う、経営陣の取締役という立場についてだ。そもそも、取締役ってのは、どんな役割なんだろうだとか。執行役員って、取締役と何が違うんだろうだとか。

以前、とある会社の取締役をやった経験や、自分で立ち上げた会社の代表取締役をやった経験もあるんだけど、会社の規模感によって全然違う立場だし、偉そうなことを言うつもりはない。

子曰わく、其の位に在らざれば、其の政を謀らず。

この本を読んで、あらためて自分の経験なんて大したことないと思った部分も多かったが、ほんの少しだけ自分の行動の源泉に触れた気がした。名ばかりの経験であっても、意外とあの経験は今活きていたのだ。

取締役のように振る舞えば、取締役である。しかし任命されない限り、そうは言ってもやっぱり取締役ではない。そりゃそう。

特に印象に残った言葉

  • 一般人では対処できない専門的な事柄を専門科に依頼する契約
  • 子育ての世界では「子は親が言っていることではなく、親がしていることをする」という。同様に社員は経営陣が言っていることではなく、経営陣がしていることをする。
  • 取締役の仕事の大半は、担当している業務分野やビジネススキームに絡むことよりも、現実的には人(特に部下)の心に関することである。
  • 名目上の取締役でも、取締役の義務と責任を追う
  • ピーターの法則(組織の全階層は、やがて無能な人間で埋め尽くされる)
  • 権力を持つ立場になった人こそ、逆に自分に厳しいことを言ってくれる女房役を、意識的に傍におくべき
  • 取締役は、社長と意見対立しても論破してはいけない
  • あらゆる投資の中で、自己投資が最も確実で大きなリターンが得られる
  • 古典や歴史書は教養ではなく、人間の原理原則を知る為に読む

古典や歴史書を人間の行動原理を知る為に読んでみよう、という事で『論語』に関する本を読み始めた。どちらも齋藤孝さんの本。

まんがでわかる 論語 (Business Comic Series)

まんがでわかる 論語 (Business Comic Series)

取締役というのは、「 一般人では対処できない専門的な事柄を専門科に依頼する契約」を会社と交わしているわけだけども、「取締役の仕事の大半は、担当している業務分野やビジネススキームに絡むことよりも、現実的には人(特に部下)の心に関することである。」ということから、「人間の行動原理を知る」ことが大事であるということが一番刺さった。

このよう行動が出来る取締役のいる組織は、組織として上手く回ると思った。「社員は経営陣が言っていることではなく、経営陣がしていることをする」ということから、組織の取締役の行動がその組織なのだ。

取締役の行動を見ることで、その組織で働きたいかどうかを決めるのは理にかなっていそうだ。

esaカテゴリで検索したり統合したり投稿したりするときのTips

esa

やあだね、esa使っているかい?

カテゴリあんじゃん、あれさ、増えてくるとわけわかんなくね?えっとどの辺にあったっけみたいなアレ。 後逆にどこのカテゴリに投稿しよう、、、みたいな気持ちになるアレ。

便利な検索

検索窓におもむろにin:って入力しようぜ。

f:id:naoto5959:20160621093214p:plain

こんな感じで候補が出るので、カテゴリ名を部分一致で検索できる。

例えば、「吉成」が含まれるカテゴリを検索したい場合、検索窓に「in:吉成」と入力すると

f:id:naoto5959:20160621094542p:plain

ほら便利!でも「吉成」が散らばっていることも分かったね。

ちらばったカテゴリを整理だ

  • イベント/吉成

は階層構造的にこれでいいかなと思うけど

  • ポエム/吉成
  • 吉成/ポエム

これはどっちかに寄せたいな。

吉成/ポエム -> ポエム/吉成

に出来るとヨサソウ。んではやってみよう。吉成/ポエムを開いて、カテゴリ名の横の鉛筆をクリック。

f:id:naoto5959:20160621094310p:plain

フォームに変わるので、ポエム/吉成に変更してUpdateする。

f:id:naoto5959:20160621094500p:plain

すると、2つカテゴリがマージされるのです(( ⁰⊖⁰)/)

f:id:naoto5959:20160621094644p:plain

便利っすねー

カテゴリに投稿する

ついでにポエみが高まってきたのでポエム書いておこう。 てなわけで、ポエムカテゴリに移動。

f:id:naoto5959:20160621094850p:plain

右上の[Create new post here]をくりっくだ。

すると、そのカテゴリに設定されたテンプレートがいい感じに反映されて記事投稿フォームが表示される。

f:id:naoto5959:20160621094948p:plain

便利っすね〜、つーかなんでテンプレート適用されてんだよって感じなんですが、templates/ポエム/ナンカタイトル

f:id:naoto5959:20160621095026p:plain

こんな感じでカテゴリ切ったテンプレートを用意してあるとそれがよしなに適用されるんですよね。

まとめ

esa並びに情報は生き物なので定期的にメンテナンスが必要だし、もっというとカテゴリは整理整頓が必要だなと思うのでesaトロールオジサンが組織に最低1人居ると良いと思うんだよね。

(( ⁰⊖⁰)/)ーな

pplogがキッカケで形になった本があるらしい #わかばちゃんと学ぶwebサイト制作の基本

pplog

pplogがキッカケ?

まじかよッて感じでずっと楽しみにしていた本がやっと届いた!

ので読みました。読みながらの感想はツイッターに書いてたのでその辺を適当に貼っておく。

まとめ

Webデザインという単語は、知っていて何となくカッコイイし興味を持っている人が、Webサイト制作〜運用までの一連の流れを知る取っ掛かりとしては、すごく良くまとまっていると思った。

Webサイトを作る目的をマーケティング視点で考えてからサイトを作り始める流れもちゃんと押さえつつ、最後には運用時のマーケティングにも触れててヨカッタ。

もしかしたら、子供とかにお父さん(やお母さん)はこういう仕事しているんだっていう説明をザックリする時とかにも良いかもしれない。

たぶん、インターネットの事業会社でもクリエイター以外の人がザックリとインターネットのシステムがどうやって動いているのかなどを知る意味でもスゴくいいなと思った。つまりウチの会社とかでもオススメできる内容かなと思ったのと、湊川さんがこの本を引っさげて新人研修の導入とかしに行くとかいう未来も見えた。ヨサソウ。

随所に割と大事なことがサラッと書いてあって、例えばノンデザイナーズ・デザインブックに書いてあるようなこと。割と頭の中でこうやって整理して理解するわな、みたいなことを綺麗にとめてて、ポイント高い。図解が多いのも、そういう理解するときにこうやるよなーという図が最初から書いてある。だからサラッとしてるのにスッと大事なことが入ってくる。

pplogってのは、

自分の思いを好きなように書ける場所が欲しい。 引用元: 俺たちのゆるふわインターネット「pplog」 をリリースしました(してました) - 納豆には卵を入れる派です。

という想いで作った なので、そこで何か思考が整理されたり、何かを始めるキッカケになったり人生の何かが変わるってのはは自分自身でも本当によくある。自分の作ったそういう場所で同じ想いを感じてくれたことがただ純粋に嬉しい。pplogでポエム書いたおかげでナニカを始めようと思った、みたいなことがただただ嬉しい。ありがとう。

Rubyちゃんが登場してたので、Railsちゃんを見てみたいな。「わかばちゃんと学ぶRuby on Rails」だな。

わかばちゃんと学ぶ Webサイト制作の基本

わかばちゃんと学ぶ Webサイト制作の基本

trelloのboardにwebhookを登録する

雑なWebhook Docsの先にあるAPI referenceも、そっすね、という感想しか湧かないドキュメントで、まあ読めば分かるだけどさって感じ。

てなわけで、どう考えても忘れるので、Webhook登録するだけの作業をまとめておく。

ちなみに、この作業では、https://github.com/jeremytregunna/ruby-trello を使う。

gemをinstall

cd ~
mkdir setup_trello_integration && cd setup_trello_integration
bundle init
echo "gem 'ruby-trello'
gem 'launchy'" >> Gemfile
bundle

下準備

bundle exec irb
require 'trello'
Trello.open_public_key_url # API key が表示される以下で渡すkeyはコレ
Trello.open_authorization_url key: 'yourpublickey'
exit

Trello.open_public_key_urlで表示される画面はこんな。ここのKEYを使うので覚えておこう。

f:id:naoto5959:20160402003946p:plain

Trello.open_authorization_url key: 'yourpublickey'で表示される画面はこんな。OAuthのアレ。よろしければ、Allowを。

f:id:naoto5959:20160402003958p:plain

TOKENが表示されるので、こやつを後で使う。

f:id:naoto5959:20160402004008p:plain

webhookを作る

環境変数に、先ほど最初に取得したKEYと最後に取得したTOKENを指定。

echo "export TRELLO_DEVELOPER_PUBLIC_KEY=************************\nexport TRELLO_MEMBER_TOKEN=*********************************************" > .envrc
direnv allow
bundle exec irb
require 'trello'

Trello.configure do |config|
  config.developer_public_key = ENV['TRELLO_DEVELOPER_PUBLIC_KEY']
  config.member_token = ENV['TRELLO_MEMBER_TOKEN']
end

board_id = Trello::Board.find('****').id # TrelloのURLの`/b/:board_shortlink/*`の:board_shortlinkの部分でboardを探す

callback_url = 'http://example.com' # 普段はPOSTで来るが、Webhook登録時はHEADに200を返すようにしておくこと。
webhook = Trello::Webhook.create(callback_url: callback_url, id_model: board_id)
webhook.id # 設定変更したい場合などに使うのでメモっておく

コメントに書いたとおり、受け側のwebhookは初回だけHEADリクエストに200を返す必要がある。なんなの。

わからん

webhookのid忘れたらどうなっちゃうわけ?

githubやesaのmentionをslackでmentionするよ

heroku github esa slack

f:id:naoto5959:20160319010013p:plain

githubesaでmentionがあったら、slackbotにこんな感じのmentionを飛ばさせたいんですよ。

f:id:naoto5959:20160319004631p:plain

やむを得ない理由だったり、ナンカついウッカリだったりで

  • githubとslackのidが違う
  • esaとslackのidが違う

なんてことが、あったりなかったりするわけですが、そんな時でも

-
  github: ppworks
  esa: koshikawa_naoto
  slack: koshikawa.naoto

みたいなidのmappingがあれば

  • githubのmentionをslackで通知
  • esaのmentionをslackで通知

することが出来るんじゃないかなーと思って作ってみました。heroku buttonでササッと構築したかったのでなるべくDBを使わずに設定ができるようにしています。

準備

github.com

へアクセスして、heroku buttonをクリックします。herokuではないどこかにホスティングしたい場合は、怪しげな英語のナニカで書かれたREADMEにそれっぽいことが書いてあります。

heroku buttonで入力を促される以下の環境変数にいろいろ設定していきます。

  • MENTIONS_MAPPINGS_FIlE_PATH
  • SLACK_WEBHOOK_URL
  • GITHUB_TO_SLACK_TOKEN
  • ESA_TO_SLACK_TOKEN

MENTIONS_MAPPINGS_FIlE_PATH

以下の様な感じの、githubesaとslackのmappingをしたyamlファイルを置いたgist(ちゃんとrawにしてね)などのURLを記載します。

-
  github: ppworks
  esa: koshikawa_naoto
  slack: koshikawa.naoto

たとえば、こんな。

https://gist.githubusercontent.com/ppworks/49f6ce44efb09d5fc8e9/raw

SLACK_WEBHOOK_URL

通知したいslackのIncoming WebHooksを作って、埋めます。

たとえば、こんな。

https://hooks.slack.com/services/xxxxxx/yyyyyy/zzzzzz

GITHUB_TO_SLACK_TOKEN

githubのmentionをslackに通知したい場合埋めて下さい。

ruby -r 'securerandom' -e 'puts SecureRandom.hex'

の結果などを入れるとよいです。

githubに設定すべきwebhookは以下のようになります。

https://your-heroku-application-name.herokuapp.com/webhooks/**ここが今作ったtoken**

githubでは以下の様なEventにhookするようにwebhookを設定して下さい。

githubのwebhook設定

  • githubのissue, pull requestでmentionされたとき
  • githubのissue, pull requestでassignされたとき

mappingが存在すれば、slackにslackbotの個別チャットでmentionが飛びます。

f:id:naoto5959:20160319004539p:plain

ESA_TO_SLACK_TOKEN

esaのmentionをslackに通知したい場合埋めて下さい。

ruby -r 'securerandom' -e 'puts SecureRandom.hex'

の結果などを入れるとよいです。

githubに設定すべきwebhookは以下のようになります。

https://your-heroku-application-name.herokuapp.com/webhooks/**ここが今作ったtoken**

esaでは以下の様なEventにhookするようにwebhookを設定して下さい。

esaのwebhook設定

  • esaのpost, commentでmentionされたとき

mappingが存在すれば、slackにslackbotの個別チャットでmentionが飛びます。

f:id:naoto5959:20160319004631p:plain

@allのときは、#general@everyone宛のmentionが飛びます。

感想

ウッカリ勢いで意味もなくRails5で作ってしまったけども、今のところそれなりに便利に運用出来ているのでよしとする。

割と便利です。

要望とかはPR頂ければ喜びますので、何卒(\( ⁰⊖⁰)/)

Circle CIでbundle updateのPull Request作成を自動化する手順

日々、bundle updateしてますか!

circleci-bundle-updatecircleci-bundle-update-prを使って、bundle updateの Pull Requestを自動化する手順をまとめてみます。作者の記事を読めばいいっちゃいいんですが、地味に抜けていた手順と各ステップは何のために必要かを整理してみました。

このgemは、Pull Requestに各gemの差分リンクを貼ってくれるのが便利だな!って思って採用してます。素敵なgemをありがとうございます。

github.com github.com

ステップは

  1. CircleCI経由でbotからgithubにpush出来るようにしておく
  2. CircleCI経由でbotからgithubにPR作れるようにしておく
  3. 外部からCircleCIへbuild指示できるようにする
  4. 外部からcronでCircleCIへbuild実行する
  5. CicleCIのbuild時にPRを送るようにする

といった感じです。

CircleCI経由でbotからgithubにpush出来るようにしておく

CircleCIからgithubgit pushするのが目的です。

  1. githubでPRを送りたいユーザーでログインする
  2. CircleCIにてPRを送りたいprojectを登録する or Followする
    f:id:naoto5959:20151223211412p:plain
  3. CircleCI経由でbotからPR出来るように鍵を登録する。Project SettingsからCheckout SSH keysからAdd user keyする
    f:id:naoto5959:20151223211426p:plain
  4. もし、まだAuthorizeしていなかった場合は、次に「Create and add nekodayo user key」をクリックして鍵を追加
    f:id:naoto5959:20151223211439p:plain
  5. こんな感じでkeyが追加されていればok
    f:id:naoto5959:20151223211447p:plain

CircleCI経由でbotからgithubにPR作れるようにしておく

CircleCIからgithubAPIを叩けるようにするのが目的です。

  1. githubでPRを送りたいユーザーでログインする
  2. access_tokenをrepo grantで作る
    f:id:naoto5959:20151223211458p:plain
  3. 生成されたAccess Tokenをコピーしておく
    f:id:naoto5959:20151223211452p:plain
  4. CircleCIの該当Project SettingsからEnvironment variablesにてGITHUB_ACCESS_TOKENという名前で環境変数を設定する
    f:id:naoto5959:20151223211506p:plain

外部からCircleCIへbuild指示できるようにする

つまり、CircleCIAPIを叩けるようにするのが目的です。

  1. CircleCIの該当Project SettingsからAPI Permissionsで、Allを選択し、bundle update cron用とか適当にラベルを付ける
    f:id:naoto5959:20151223211513p:plain
  2. 出来上がったTOKENをcron botから使う

外部からcronでCircleCIへbuild実行する

  1. ci-bundle-updateのheroku buttonでデプロイ
  2. 指示通りに環境変数を設定
    • GITHUB_USERNAME=botのユーザー名
    • GITHUB_REPONAME=projectの名前
    • CIRCLECI_TOKEN=先ほどのTOKEN
  3. heroku schedulerにbundle exec ruby ci-bundle-update.rbを設定

CicleCIのbuild時にPRを送るようにする

github.com

を参考に、pplogではこんな感じに設定しています。

deployment:
  production:
    branch: master
    commands:
      - |
        if [ "${BUNDLE_UPDATE}" ] ; then
          gem update bundler --no-document
          gem install circleci-bundle-update-pr
          circleci-bundle-update-pr
        fi
test:
  override:
    - |
      if [ -z "${BUNDLE_UPDATE}" ] ; then
        bundle exec rspec --fail-fast
      fi

こんな感じのPull Requestが届くようになります。

f:id:naoto5959:20151223220030p:plain

余談

設定している際に、botACCESS_TOKENを持っている状態でワザワザgithu user_nameとemailを指定している箇所が無駄だなと思ったので、Pull Request送ったりしてました。

github.com

まとめ

Railsを選択するには、「それでもRailsを選択する3つの理由 - pblog」といった理由があるはずで、そのためには

  • テストを書く
  • 周辺gemの更新に追随し続ける

必要があります。そのためにも自動でbundle updateをして日常的に最新のgemを使うようにしたいですね。