若き JavaScripter の悩み

何かをdisっているときは、たいていツンデレですので大目に見てやってください。愛です。

git challenge 開催しました

git challenge というイベントを開きました。

alpha.mixi.co.jp

私は、企画、問題作成、インフラ構築、微妙にPM、みたいな感じで全般的に担当しています。 問題は全部で20問弱用意しているのですが、このうちの11問を作成しています。 これらの雑感を残しておきます。

企画について

続きを読む

最近登壇したイベント

2015.06.26 JSオジサン #5

2015.09.26 TestingFramworkMeeting

2015.11.05 第13回HTML5ビギナーズ×JSオジサン

ミクシィの2015年度 JavaScript 研修資料を書いて公開しました

詳細は 2日でできる!JavaScript トレーニング - mixi Engineers' Blog に書きました。

研修資料をつかって講義するのは来週なので、楽しみですねー!

VimConf2014 で発表してきました

VimConf 2014 を勤め先で開催することになったので、LT登壇者兼PAとして参加してきました。 LT では、Vimmixiについてと、最近ずっとコツコツつくっていた Vim の lint ツール vint の2つについて発表してきました。

LTについて

続きを読む

Creators Meetup 18 で発表してきた(+感想)

そういえば、一ヶ月前にクリエイターの集うイベント「Creators Meetup 18th」で発表してきました。発表した内容は一年ほど前の記事に書いたプレゼンイイネシステム「piine!」です。

なお、下の動画から piine がご覧になれます。

piine demo movie

このスライドで言いたかったこと

  • コミュ障でも小道具で立派な発表ができる
  • バグによる偶然の解決策を見逃すな
  • 「一見関係ないように見えても、後で役にたつ」は本当だった(Connecting the Dots)

発表の詳細は SpeakerDeck をご覧ください。

続きを読む

curl -sL dot.hoge.com | sh で自分専用環境を構築する方法(かっこいい)

こんばんは、最近Slackのbotを開発していて、同期から「それ、hubotでできるよ」と聞いて一度死んで転生した(;♥;)です。今回は周りのエンジニアがシビれる環境構築コマンドを作成してみましょう!

なんと、下のコマンド一発で環境構築できるんですよ? シビれますね!

$ curl -sL dot.orgachem.com | sh

なお、内容はさくらVPS向けに書いております!

やり方

  1. サブドメインを追加

    サブドメインの登録には時間がかかるので先に済ませておきましょう。

    私はさくらでドメインorgachem.org)を取得したので、さくらからdotfiles用のサブドメインdot.orgachem.org)を追加します。 お名前comの方は、お名前.comでサブドメインを登録する - Wrap Disital Worldが参考になりそうです。

    1. さくらのDNS設定ページを開く
    2. 左側の変更ボタンを押す
    3. エントリ名にサブドメイン名を入力
    4. 種別に「別名(CNAME)」を選択
    5. 値に「@」を入力
    6. 変更ボタンを押す
    7. 左側のデータ送信をクリック
    8. DNSレコードが更新されるまで待つ(数十分から数時間)
  2. github.bashrcなどをまとめたリポジトリdotfiles)を作成

    既にdotfiles系のリポジトリがある方は 3 に進んでください。

    github.bashrc.vimrcなどをまとめたdotfilesというリポジトリを作成します(例:OrgaChem/dotfiles)。まず、サーバーにアップロードする設定ファイルを~/.dotfilesにまとめます。

     $ mkdir ~/.dotfiles
     $ cd ~/.dotfiles
     $ mv ~/.bashrc .
     $ mv ~/.vimrc .
     ...
    

    次に、githubで新しいリポジトリを作成します(new repositryからできます)。リポジトリの名前はdotfilesにしておきましょう。

     $ git init
     $ git add ~/.*
     $ git commit -m "Initial commit"
     $ git remote add origin https://github.com/YOUR_ACCOUNT/dotfiles.git
     $ git push -u origin master
    

    4行目のYOUR_ACCOUNTは、あなたのgithubアカウントに書き換えてください。

  3. インストール用のシェルスクリプトを用意

    次に、インストール用のシェルスクリプトを用意しましょう。2行目はおまじないです。

     #!/bin/sh
     # Thanks, @kaorimatz!
    
     set -e
     set -u
    
     setup() {
         dotfiles=$HOME/.dotfiles
    
         has() {
             type "$1" > /dev/null 2>&1
         }
    
         symlink() {
             [ -e "$2" ] || ln -s "$1" "$2"
         }
    
         if [ -d "$dotfiles" ]; then
             (cd "$dotfiles" && git pull --rebase)
         else
             git clone https://github.com/YOUR_ACCOUNT/.dotfiles "$dotfiles"
         fi
    
         has git && symlink "$dotfiles/.gitconfig" "$HOME/.gitconfig"
         has git && symlink "$dotfiles/.zshrc" "$HOME/.zshrc"
         has vim && symlink "$dotfiles/.vimrc" "$HOME/.vimrc"
     }
    
     setup
    

    下から9行目のYOUR_ACCOUNTもあなたのgithubアカウントに書き換えてください。 次に、下から4行目〜6行目のシンボリックリンクを張る部分は、設定ファイルに応じて書き換えてください。

    このスクリプト~/.dotfiles/setup.sh に保存します。

     $ cd ~/.dotfiles
     $ git add setup.sh
     $ git commit -m "Add setup script"
     $ git push
    
  4. サーバー(さくらVPSなど)にnginxを立てる

    次に、curlコマンド curl -sL dot.hoge.com で先ほどのセットアップ用スクリプトをダウンロードできるようにWebサーバーを準備します。今回はnginxを使います。サーバーにログインしたらnginxをインストールしましょう。

     (サーバーで実行)
     $ sudo rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
     $ sudo yum install -y nginx --enablerepo=nginx
     $ sudo service nginx start
     $ sudo chkconfig nginx on
    

    nginxの設定をおこないます。下から4行目のexample.comをあなたのドメインに書き換え、下から2行目のYOUR_ACOUNTはあなたのgithubアカウントに書き換えてください。

     $ sudoedit /etc/nginx/conf.d/default.conf
     server {
         listen       80;
         server_name  localhost;
    
         error_page   500 502 503 504  /50x.html;
         location = /50x.html {
             root   /usr/share/nginx/html;
         }
     }
    
     server {
         listen 80;
         server_name dot.example.com;
    
         rewrite ^ https://raw.githubusercontent.com/YOUR_ACCOUNT/dotfiles/master/setup.sh;
     }
    

    この設定は、dot.hoge.comでアクセスしてきたクライアントをhttps://raw.githubusercontent.com/YOUR_ACCOUNT/dotfiles/にリダイレクトさせるものです。

    nginxを再起動します。

     $ sudo service nginx restart
    
  5. 終わり

     $ curl -sL dot.YOUR_DOMAIN.org | sh
    

終わりに

いかがでしたか? これであなたもシビれる環境構築が始められますね!

この利用コンセプトを披露してくれた@kaorimatz、このインストール方法の注意点についてアドバイスにしてくださった@supermomongaさんに感謝!

ギーク心理学入門(1/3)

はじめに

エンジニアの中にギークと呼ばれる人たちがいることをご存じだろうか。 彼らは技術が大好きで、常に技術のことを考えているような人物である。 そして、多くのギークは下の写真のような趣をもつ。

f:id:devorgachem:20090322100910j:plain(「ナードの復讐」より)

エンジニアの中でも、特にギークはチームメンバーとの軋轢を生みやすい。 このところ、私の周囲でギークと非ギークの間で軋轢が生じていて、私はその解決にあたっていた。 解決を目指す過程で、ギークと非ギークの間に生じる軋轢が相互の不理解によって生じることがわかってきた。 チーム内の軋轢は容易にチームメンバーの離脱を招く。 ギークと非ギークの間の軋轢を緩和することは、チームの技術力を維持する上で不可欠である。

では、どうすれば軋轢を緩和できるのか。 これを非ギークの立場から議論するには、ギークが何をどのように考え、そして感じているかを知らなければならない。 すなわち、ギークギークの心理学を知らなければならない

そして、チームでうまくやるためには、ギーク側からも歩み寄らなければならない。 チームがうまくいけば、今のチームから離れ、別のチームに加わるといった面倒に煩わされず、目の前の仕事に集中できるからだ。 歩み寄りの内容を具体的に言うならば、ギークは自分の行動の理由を周囲に伝える努力をはじめなければならない、ということだ。 その際にも、この記事を読んで知識を共有しておけば、伝えやすくなる効果があるだろう。

この記事では、ギークの心理についての解釈から、コミュニケーションストレスを減らすための実践的手法までを3回に分けて連載する。 なお、以下の2つの読者を想定して書いている:

  • ギークと意見が合わなくて困っている人
  • 周囲と意見が合わなくて困っているギーク

ここで注意して欲しいことがある。 この記事は、私の周囲におけるギークと非ギークへのヒアリングを基にして書いている。 あくまで、私の周囲という狭い範囲での経験談に過ぎないということである。

なお、異論や意見、質問がある場合は積極的にコメントしてほしい。 私はギーク心理学の議論をいつでも歓迎している。

目次

  1. ギークを取り巻くコミュニケーショントラブル(本記事)
    1. ギークとのコミュニケーションあるある
    2. ギークが感じているコミュニケーションストレス
  2. ギーク社会を知る(次回記事)
    1. どんなギークが尊敬されるのか
    2. ギークが嫌うこと
    3. ギークあるあるの裏側
  3. ギークとのつきあい方(次々回記事)
    1. ギークあるあるを緩和する
    2. つきあい方の基本原則
    3. 具体例

ギークを取り巻くコミュニケーショントラブル

ギークとのコミュニケーションあるある

まず、ギークと関わるなかでよく見かける事例を取り上げ、ギークを取り巻くコミュニケーションストレスを観察していく。

前置きしておくが、これらの事例を誰が悪かったという責任問題で決着させるつもりはない。 責任の所在がわかったからといって、今ある軋轢は解消しないからだ。 軋轢を解消するためには、お互いに何ができるのか、ということをそれぞれが考えることが重要なのだ。

CASE: チームへの貢献のスタンスの違い

ギークと非ギークの間には、チームへの貢献に対するスタンスに差があることがある。 たとえば、次のような会話を想像してもらえるとよいかもしれない。


リーダー(非ギーク「よし、ではこの仕事を全員で一丸となって解決していこう!」

ギーク「この仕事を全員でやる必要はないと思うよ。僕と、彼だけの方が効率的に解決できるよ」

リーダー「(困惑顔)」


リーダーから見れば、この提案はチームの結束を乱す最悪の提案だ。 今風に言えば、ぶっちゃけありえ 空気嫁というところだろう。 それでも悪びれることのないギークはいったい何を考えているのだろうか。

では、このやりとりに心の声を付け加えてみよう。


リーダー「よし、ではこの仕事を全員で一丸となって解決していこう!」
心の声:(チームみんなで仲良く助け合って、最高の成果をだそう!)

ギーク「いや、この仕事を全員でやる必要はないと思うよ。僕と彼だけの方が効率的に解決できるよ」
心の声:(僕は最高の成果を出すために、効率的な方法を提案したいんだ)

リーダー「(困惑顔)」
心の声:(え…この人何言ってるの…?空気読んでよ!)


実は、ギークギークなりにチームがよりよい成果を出すための提案をしたかったのである。 良い成果をだすように仕事をしたい!という目標までは同じだったのに、ただアプローチが違っただけで軋轢が生まれたのだ。

リーダーはチームの輪を乱さないことや、チームメンバー全員が一丸となって物事を進めることを重視することが多い。ところが、ギークは話の流れや結論に筋が通っていることを重視する。また、チームの力を個の力のまとまりと考えていて、協調性を重視しないことが多い。

ギークが感じているコミュニケーションストレス

先の事例「チームへの貢献のスタンスの違い」では、ギークはコミュニケーションストレスを感じていないように見える。しかし、実際はメンバーに漂う不穏な空気を読み取り、「あれ?何かまずいこと言ったかな…」と不安になっている。ギークもメンバーの顔色をうかがっているのだ。

このようなコミュニケーションが続くと、ギークなりに「どうやらみんなと意見が合わないようで迷惑をかけている。ここにいないほうがいいよね…」と考えてチームを去っていくことになる。

ここまでのまとめ

  • ギークは空気を読まない発言をすることがよくある
  • ギークは話の流れや結論に筋が通っていることを重視している
  • ギークの空気を読まない発言は、ギークなりにチームを思っての行動だったりする

ギーク社会を知る

では、ギークと非ギークのアプローチはどうしてそこまで離れてしまったのだろうか? それを知るには、ギーク社会を知らなければならない。

実は、社会を知るための勘所がひとつある。その社会で尊敬される人物像を知ることだ。 たとえば、一般的に尊敬される人物像をあげてみよう。

  • メンバー全員と平等に接する
  • チームメンバーの足並みを乱さない
  • メンバーが不快になるような言動をしない

どうだろうか?どれも素晴らしい行動である。では、先の事例「チームへの貢献のスタンスの違い」のリーダーの行動を、この人物像に照らし合わせてみるとどう見えるだろうか?なるほど、尊敬される人物像と同じになるよう行動していたわけだ。 このように、尊敬される人物像を知るとその人の行動の理由が見えてくる。

つまり、ギークから尊敬される人物像を知れば、ギークの行動の理由が見えてくるのである。

(続きは次回の記事で)