zimathon blog

フルリモート開発エンジニア

OctoTreeをGithubEnterpriseで使う方法

OctotreeがGithubEnterpriseで利用できるようになったらしいので設定してみた

OctoTreeって?

GoogleChromeのExtensionでGithub上でリポジトリ内部をTree構造で表示する機能があります

f:id:sisijumi:20140808140316p:plain

参考記事:Octotree – GitHub利用者は必見!GitHubでツリー表示

利用方法

インストール

OctoTreeからインストールする
GoogleChromeのExtensionです

Github.comに遷移

OctoTreeからGithubEnterpriseのURLを登録
※最初はGithub.comから行う必要があります

f:id:sisijumi:20140808140317p:plain

Githubエンタープライズに遷移して、なにかリポジトリを開いてみる

おぉ!でてる!! (すみません。ほとんどぼかしています。。)

f:id:sisijumi:20140808140914p:plain

便利だから使ってみてください!

【RubyOnRails】nokogiri をインストールしようとしてエラーが出るときの解決方法

開発環境

発生したエラー

bundle install 時に nokogiri インストール時にエラーになる

Building nokogiri using packaged libraries.

Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.

    /Users/sasajimay/.rbenv/versions/2.0.0-p353/bin/ruby extconf.rb vendor/bundle
Building nokogiri using packaged libraries.
-----
libiconv is missing.  please visit http://nokogiri.org/tutorials/installing_nokogiri.html for help with installing dependencies.
-----
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

Provided configuration options:
    --with-opt-dir
    --without-opt-dir
    --with-opt-include
    --without-opt-include=${opt-dir}/include
    --with-opt-lib
    --without-opt-lib=${opt-dir}/lib
    --with-make-prog
    --without-make-prog
    --srcdir=.
    --curdir
    --ruby=/Users/sasajimay/.rbenv/versions/2.0.0-p353/bin/ruby
    --help
    --clean
    --use-system-libraries
    --enable-static
    --disable-static
    --with-zlib-dir
    --without-zlib-dir
    --with-zlib-include
    --without-zlib-include=${zlib-dir}/include
    --with-zlib-lib
    --without-zlib-lib=${zlib-dir}/lib
    --enable-cross-build
    --disable-cross-build


Gem files will remain installed in /Users/sasajimay/projects/ruby/rails_projects/helloworld/vendor/bundle/ruby/2.0.0/gems/nokogiri-1.6.3.1 for inspection.
Results logged to /Users/sasajimay/projects/ruby/rails_projects/helloworld/vendor/bundle/ruby/2.0.0/gems/nokogiri-1.6.3.1/ext/nokogiri/gem_make.out
An error occurred while installing nokogiri (1.6.3.1), and Bundler cannot continue.
Make sure that `gem install nokogiri -v '1.6.3.1'` succeeds before bundling.

解決方法

必要なライブラリをインストール

Nokogiri 鋸 インストールチュートリアルがわかりやすい

brew install

上記チュートリアルとは異なるバージョンがインストールされるから注意

brew install libxml2 libxslt
brew link libxml2 libxslt

libiconvはソースから

wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz
tar xvfz libiconv-1.13.1.tar.gz
cd libiconv-1.13.1
./configure --prefix=/usr/local/Cellar/libiconv/1.13.1
make
sudo make install

brew link libiconv

設定後bundle installでまだエラー orz

libiconv is missing.  please visit http://nokogiri.org/tutorials/installing_nokogiri.html for help with installing dependencies.

どうもライブラリの参照がおかしいっぽい

brew install する時にバージョンを指定

以下のコマンドを実行

bundle config build.nokogiri --use-system-libraries --with-xml2-include=/usr/local/Cellar/libxml2/2.9.1/include/libxml2 --with-xml2-lib=/usr/local/Cellar/libxml2/2.9.1/lib --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.28 --with-iconv-include=/usr/local/Cellar/libiconv/1.13.1/include --with-iconv-lib=/usr/local/Cellar/libiconv/1.13.1/lib

実行後の ~/.bundle/config

---
BUNDLE_BUILD__NOKOGIRI: --use-system-libraries --with-xml2-include=/usr/local/Cellar/libxml2/2.9.1/include/libxml2 --with-xml2-lib=/usr/local/Cellar/libxml2/2.9.1/lib --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.28 --with-iconv-include=/usr/local/Cellar/libiconv/1.13.1/include --with-iconv-lib=/usr/local/Cellar/libiconv/1.13.1/lib

この設定でbundle installできた!!!!

GoogleChromeでUserAgentを変更する方法

GoogleChromeでUserAgentを変更する方法がぱっとわからなかったので、メモしてまとめる
バージョン 35.0.1916.114 m

Chromeデベロッパツールを開く

デベロッパツール上で以下操作を実施

f:id:sisijumi:20140527215358p:plain

変更したいUserAgentを選択

変更したいUserAgentを選択するだけ
Otherだとフリーフォーマットで入力できます (空文字は許容されていない。。。)

f:id:sisijumi:20140527215401p:plain

エンジニアの学び方を改めて考えた

今回のWEB+DB PRESS Vol.80にとても良いセクション
エンジニアの学び方
がありました。

WEB+DB PRESS Vol.80
WEB+DB PRESS Vol.80

いろいろ参考になったので、今後の為にまとめておこうと思います。

そもそも何故こんなことが話題になるか

今のWEB業界って変化がめちゃくちゃ激しいです。時進日歩(日進月歩より早いという意味)です、はい。
全ての技術を身に付けることは到底不可能なので、必要になるスキルがいくつかあります。

  • 自分に必要な情報をいかにして早く集めるか
  • 集めた情報をどうやって理解するか
  • 理解した情報をどうやって自分の開発に生かすか

こういったスキルをどうやって伸ばすか、その具体的な方法を説明してくれています。

1. 効率的に学ぶには

知識に存在する3つの軸

  • 広い視野
    • 自分が学ぶべきことを見つける為に必要
    • 勉強会が良い例
    • 特定の状況に特化した知識が多い
    • 「時間をかけて学ぶべき対象を見つけるための第一歩」
    • ここで立ち止まらずに、先に進むこと
  • 深い理解
    • この軸が無いと、取り入れた知識を応用できない
    • 得た情報から知識を抽象化することが必要である
    • 「すでに経験して知っていることを、もっと深く理解する」
    • この軸ばかりでは新しいものに築くことができない
    • 広い視野と深い理解のバランスが必要
  • 応用対象
    • 自分の理解を活かして成果を出す
    • 自分の会社の中のコンテキストを理解せずに、他の会社のコンテキストでの解決方法を真似てもうまくいかない(やりがち。。。)
    • 自分の会社をよく観察して、会社の外の知識を会社の中向けに翻訳する
    • この軸ばかりに頼ると所属している会社・組織のやり方に染まってしまう

どこかに特化するのではなく、バランスが大事だと思います。

学びに存在する3つのフェーズ

  • 知識収集
    • やる気を元に知識を得る
    • ただし、材料を集めるだけでは何も生まれない
    • 取捨選択が必要
  • 抽象化
    • 集めた知識からモデルを作る
  • 応用
    • モデルを使って成果を得る
    • 自分が理解したことを実際に使ってみることで、正しく理解できているか確認する
    • 理解できれば、自信につながる

勉強すればするほど今自分はどれぐらいできるようになったか、不安になることがあります。
そういった不安を解決するには(僕の経験則からいくと)、
プロダクトを作る
しかないと考えています。
たくさん書いて、たくさん失敗することで多くの学びを得ることが出来ます。

本書では、解決するべき具体的な悩みに対するアクションが説明されています。

  • 学ぶ時間がない(単純にやる気不足)
    • 2章
  • 知識が浅いという不安
    • 3章
  • 何を学べばよいかわからない
    • 4章

2. 最初の一歩をどう踏み出すか

勉強したいと思っているが、「やる気がでない」という状態を解決し、一歩踏み出す方法について

  • ゴールが大きすぎると圧倒されて踏み出せない
  • 近いゴールを設定し、そこまで走ることを目標にする
  • まずはもっと細かいタスクに分割する
    • 必要なところから学ぶ
      • 目標が明確化されている
      • 目標が実現可能である(たどり着けることが大事)
      • おおまかに全体像を把握している
      • 最初からこんなの無理だから、悲観することない(そりゃそうだ)
    • おおまかに全体像をつかむ
      • まずはおおまかに、徐々に詳細を理解していくというやり方が良い
        • いきなり全部を理解しようとしても頭に入るわけない
      • ドキュメントの大まかな構造を理解する
        • どこに何があるかをある程度把握しておく必要がある
    • 片っ端から写経する
      • 写経
        • しっかりと理解しながら進める
        • もちろん書いていることに疑問を持ちながら
      • 時間を区切る
        • 写経するにも区切りながらやる(じゃないとしんどい)

3. どうやって深く理解するか

「いろいろ学んだけど理解が浅い気がする。。。」
と感じる不安には二通りのタイプがあるらしいです。

  • 「深い理解」方向の知識が足りない
  • 「抽象化」のフェーズに慣れていない
    • 抽象化のフェーズでは自分でモデルを生み出さなければならない
    • 「正解のモデルが本に書いてある、それを見つければ良い」と考えるのは悪い例
    • 不安を解消し自信を持つには、得た情報を「抽象化」してモデルにし、自分の問題に応用して、初めて成果が出る

抽象化の部分に強く共感しました(特に知らない言語に関しては、僕もやりがち)。
答えがどこかにあると考えて正解を探すのではなく、自分でモデルを作り出すことが大事です。
このプロセスを繰り返すことで、抽象力が鍛えられ、その力が付けば付くほど自信につながります。

どうやって抽象化するか

いくつかやり方が書かれていましたが、特に気になったのは以下の手法です。

  • 作って学ぶ
    • 難しい物に挑戦しない
    • 試してみて結果が期待通りか検証する
    • 自分でやってみるのが一番

抽象化によってモデルを繰り返し作り続け、そのモデルが正しいかを検証する
この繰り返しで抽象化力を上げたいです。

4. 何を学ぶか、何を作るか

  • やれと言われたことをやる
    • 意外と大事なとりあえず試してみるというスタンス
  • 他人を真似てみる
    • あこがれのエンジニアの方がやっていることをトレースしてみる − 解決すべき問題を見つける
    • 自分が解決したいという問題を見つければ、自ずと何を作ればいいかがわかる
  • 完璧を求めない
    • 「何を学ぶべきか」に正解はない
      • 進んでみてダメだったら方向転換すれば良い
      • 移り気な自分を受け入れる(w)
    • 大事なことはとにかく進むこと

最後に

大事なことは、それぞれを繰り返すことだと思います。

  • 知識収集
  • 抽象化
  • 応用

具体的には、以下のような流れになると思います。

①いろいろな情報を集めて学び、それに基づいて実際に動くものを作ってみる
②自分が手を動かした中で得た知識を、今までの経験などと照らしあわせて抽象化する
③抽象化された知識を試して、実際に成果を出す(うまくいけば自信につながるし、失敗すれば学びになる)

この繰り返しを続けていけば、抽象力がどんどん上がっていって、
さまざまな分野に応用できるようになるのではないかと思います。

ちなみに、本エントリである「エンジニアの学び方」の内容に関して著者の西尾さん自身がブログに書いているので、是非読んでみて下さい。

「エンジニアの学び方」を執筆しました。 - 西尾泰和のはてなダイアリー

ちなみにブログ内にある「コーディングを支える技術」は今読んでます。

コーディングを支える技術 ~成り立ちから学ぶプログラミング作法 (WEB+DB PRESS plus)

コーディングを支える技術 ~成り立ちから学ぶプログラミング作法 (WEB+DB PRESS plus)

CTOって何なんだ

こう思った理由

最近いろいろあったのと、@wadapさんのブログを読んだのでいろいろ考えさせられました。(GWでじっくり考える時間もあるし。)

僕が考えるCTO

求められていることはいろいろあると思います。@wadapさんのぶろぐにもある通り、こういう役割が強いと思います。

私なりの解釈ですが、CTOは経営層に近い仕事なんですよね。実際に私はCo-Founderであり、取締役です。 その立場を活かして、テクノロジーをどう経営に活用するか、それによっていかに会社の価値を上げることができるかという点だと思います。

技術を活かして会社、組織の価値を上げていくということが必要なんだと思います。これ、心底そう思います。マジです。やばいです。

根底にあるのは信頼関係だと思います。組織を導く役割が求められている以上、「あの人があそこまで言ってくれるなら。。。」と思わせる必要があります。

そう思うには、今まで積み上げてきた実績、なによりそれに基づいたその人に対する絶対的な信頼感が必要だとおもいます。誰よりも手を動かす人であるべきだとも思います。


そもそもなんでこんな話をしてるか

  • CTOとして組織を導ける強いエンジニアになりたいから
  • フルスタックなエンジニアになりたいから
  • すごい人に会うことが多くて、最近エキサイティングすぎるから
  • 現場が少しずつ変わってきているから
  • 休み前にGWにしっかり考えてきてほしいと言われたから
まだまだこれからです、はい。


システム開発のトレードオフに関して

システム開発においてよく言われている
トレードオフ
について考えることがありました。

開発において大事にすべき要素(僕が大事にしていること)は

  • スピード
  • クオリティ(+セキュリティ)
  • フレキシビリティ

です。

よく「何かを取れば何かを捨てないといけない、そこはトレードオフだよ」 と言われます。(何を隠そう、僕も言っています。)

この言葉を聞いてたまに思うのが、
「本当にそうしなければいけないのか」
という疑問です。

何かを得るために何かを捨てなければいけない
なんて誰が決めたのでしょうか。

それは本当にベストなやり方なのか(他にもやり方があるのでは?)、
自分の傲慢ではないのか、
他の人だともっと良いやり方がるのではないか、
あの人に任せてるからこんなに時間がかかっているのではないか、
などなどモヤモヤを上げればきりがありません。

何が言いたいのかというと、
トレードオフなんてくそみたいな前提条件は捨てる
常に今の自分を否定し続ける

ってやっていかないと良いエンジニアにはたぶんなれない

nodebrewが素晴らしすぎる

nodeは頻繁にバージョン上がるし、毎回インストールまじで面倒だし、 新しく出るバージョン11試したいし とか思ってたらすげー素敵なやつ見つけた

nodebrewというNode.jsバージョン管理ツール

https://github.com/hokaccha/nodebrew

導入手順は下記が参考になります。
node.jsのversionを管理するためにnodebrewを利用する - Qiita

注意点としては、インストール前に一度Node.jsを削除する事です。

pkgファイルでインストールしたnode.jsをアンインストールした時ハマったこと(Mac OS X) - Qiita

とにかくおすすめ。Node.jsやる人は絶対にいれたほうが良いと思います。