<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>m.igrs.jp</title>
    <description>Dust In The Plain Text</description>
    <link>https://m.igrs.jp//</link>
    <atom:link href="https://m.igrs.jp//feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Sun, 15 Dec 2019 08:04:36 +0900</pubDate>
    <lastBuildDate>Sun, 15 Dec 2019 08:04:36 +0900</lastBuildDate>
    <generator>Jekyll v4.0.0</generator>
    
      <item>
        <title>Vimacs - VS Code で Vim と Emacs のいいとこどり</title>
        <description>&lt;p&gt;昨年からメインエディターを &lt;a href=&quot;http://localhost:4000/blog/2018/05/06/goodbye-vim/&quot;&gt;Vim から VS Code に移行した&lt;/a&gt;のですが、やはり Vim キーバインドからは逃れられず基本的には &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=vscodevim.vim&quot;&gt;Vim 拡張&lt;/a&gt; を利用して過ごしています。&lt;/p&gt;

&lt;p&gt;また普段の Vim ではインサートモード時に基本的な Emacs キーバインディングを使えるようにカスタマイズしているのですが、それは別途キーバインディングファイル（&lt;code class=&quot;highlighter-rouge&quot;&gt;keybindings.json&lt;/code&gt;）をカスタマイズすることで実現できていました。&lt;/p&gt;

&lt;p&gt;今回は、そんなニッチな設定だけど同じようなことをしている人は他にもいるはずだし、オススメのスタイルなのでぜひみんなにも使って欲しいという思いから VS Code 拡張を作ったので紹介します。&lt;/p&gt;

&lt;h2 id=&quot;vimacs-for-vs-code&quot;&gt;Vimacs for VS Code&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/migrs/vscode-vimacs/master/images/icon.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=vscodevim.vim&quot;&gt;VSCodeVim&lt;/a&gt; のインサートモードで基本的な Emacs キーバインディングを利用できるようにする VS Code 拡張です。
（&lt;em&gt;VSCodeVim&lt;/em&gt; のアイコンをベースにしてますが、作者から許可は得ています）&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=migrs.vimacs#review-details&quot;&gt;Vimacs for VS Code&lt;/a&gt; (Visual Studio Code Marketplace)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/migrs/vscode-vimacs&quot;&gt;vscode-vimacs&lt;/a&gt; (GitHub)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;original-vimacs&quot;&gt;Original Vimacs&lt;/h3&gt;

&lt;p&gt;Vimacs という名前ですがもともと Vim Plugin として同様の名前のものがありました。&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://algorithm.com.au/code/vimacs/&quot;&gt;Vimacs: Vim-Improved Emacs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/andrep/vimacs&quot;&gt;github.com/andrep/vimacs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;コンセプトがほぼ同じということで &lt;em&gt;for VS Code&lt;/em&gt; として名前を継承しつつ、よりシンプルな実装としました。&lt;/p&gt;

&lt;h3 id=&quot;why-use-vimacs&quot;&gt;Why use Vimacs?&lt;/h3&gt;

&lt;p&gt;Vim の最大の特徴はノーマルモードやブロックモードにおけるキーバインディングにあると思っていて、学習ハードルは高いものの一度その操作に慣れるとテキスト編集ツールとしては右に出るものがないくらい強力なツールとしてその威力を発揮します。&lt;/p&gt;

&lt;p&gt;一方、インサートモードの実装は非常にシンプルで、ノーマルモードで編集することを前提としているのでコンセプトとしては理解できるのですが、入力・修正を繰り返すようなテキスト編集を行う際に頻度の高いモード切替は煩わしく感じることがあります。&lt;/p&gt;

&lt;p&gt;また、macOS のほぼすべてのテキスト編集コンポーネントではシンプルな Emacs キーバインドが利用できるようになっていたり、シェル操作でも Emacs ベースなものが標準的になっていたりすることもあって、文字入力においては Emacs キーバインドの方が慣れ親しまれたものとなっています。&lt;/p&gt;

&lt;p&gt;ということで、Vim のインサートモードのときに基本的な Emacs キーバインディングが利用できるようにすることで両者のメリットをいいところどりしてちょっと幸せになれるハイブリッドスタイルを提唱します。&lt;/p&gt;

&lt;h3 id=&quot;やりたいこと&quot;&gt;やりたいこと&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;ベースの環境としては VS Code を使いたい&lt;/li&gt;
  &lt;li&gt;カーソル操作は Vim キーバインドを使いたい&lt;/li&gt;
  &lt;li&gt;文字入力時は Emacs キーバインドを使いたい&lt;/li&gt;
&lt;/ul&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: center&quot;&gt;-&lt;/th&gt;
      &lt;th&gt;命令&lt;/th&gt;
      &lt;th&gt;編集&lt;/th&gt;
      &lt;th&gt;入力&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;em&gt;Vim&lt;/em&gt;&lt;/td&gt;
      &lt;td&gt;Command Mode&lt;/td&gt;
      &lt;td&gt;Normal/Visual Mode&lt;/td&gt;
      &lt;td&gt;Insert Mode&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: center&quot;&gt;&lt;em&gt;Vimacs&lt;/em&gt;&lt;/td&gt;
      &lt;td&gt;VS Code&lt;/td&gt;
      &lt;td&gt;Vim&lt;/td&gt;
      &lt;td&gt;Emacs&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Vim がコンテキストごとに各モードを使い分けるのと同じよな感覚でに各エディターを使い分けるイメージです。&lt;/p&gt;

&lt;h3 id=&quot;コンセプト&quot;&gt;コンセプト&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;コマンド系のキーバインドは VS Code 標準のものを利用する&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;VSCodeVim&lt;/em&gt; をベースとして基本的にインサートモードのときだけ Emacs キーバインドを定義&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;できること&quot;&gt;できること&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;インサートモードで基本的な Emacs キーバインディングが使える&lt;/li&gt;
  &lt;li&gt;カーソル移動以外ではリージョン操作系にも対応&lt;/li&gt;
  &lt;li&gt;VS Code のコマンド入力やファイル選択のUIでも &lt;code class=&quot;highlighter-rouge&quot;&gt;Ctrl+N&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;Ctrl+P&lt;/code&gt; などのカーソル移動に対応&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;てきてないこと&quot;&gt;てきてないこと&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;キーバインディングが重複定義されたときの優先順の制御の仕様がよくわかっておらず、意図通り動かないキーバインディングがいくつかある
    &lt;ul&gt;
      &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;keybindings.json&lt;/code&gt; の方で再度定義したり邪魔なものを無効にしたりすることで回避している&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Column Region Mode も実装してみたのですがまともに動いてなかったのでいったん取り下げてます&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pull Request お待ちしております&lt;/p&gt;

&lt;h3 id=&quot;設定例&quot;&gt;設定例&lt;/h3&gt;

&lt;p&gt;参考までに私の &lt;em&gt;VSCodeVim&lt;/em&gt; 個人設定（&lt;code class=&quot;highlighter-rouge&quot;&gt;settings.json&lt;/code&gt;）では以下のような設定となっています。Vimacs 独自の設定項目はとくにありません。&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;vim.useCtrlKeys&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;vim.overrideCopy&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;vim.hlsearch&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;vim.useSystemClipboard&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;vim.visualstar&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;vim.handleKeys&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;&amp;lt;C-f&amp;gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;&amp;lt;C-b&amp;gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;&amp;lt;C-u&amp;gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;&amp;lt;C-r&amp;gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;&amp;lt;C-v&amp;gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;&amp;lt;C-[&amp;gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;&amp;lt;C-w&amp;gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;vim.cursorStylePerMode.normal&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;block&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;vim.cursorStylePerMode.insert&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;line-thin&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;vim.cursorStylePerMode.replace&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;block-outline&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;&quot;vim.statusBarColorControl&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;その他注意点&quot;&gt;その他注意点&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;em&gt;VSCodeVim&lt;/em&gt; の Undo 履歴管理はちょっと挙動があやしいので VS Code 標準のキーバインド（&lt;code class=&quot;highlighter-rouge&quot;&gt;Cmd+Z&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;Cmd+Shift+Z&lt;/code&gt;）を利用するのがオススメです&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;公開後の反応&quot;&gt;公開後の反応&lt;/h2&gt;

&lt;p&gt;昨年ひっそりリリースしてから1年以上経っているわけですが、ありがたいことに反応もあったようなのでいくつかピックアップしておきます。&lt;/p&gt;

&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p lang=&quot;ja&quot; dir=&quot;ltr&quot;&gt;&lt;a href=&quot;https://twitter.com/hashtag/%E4%BB%8A%E6%97%A5%E3%81%AEVSCode?src=hash&amp;amp;ref_src=twsrc%5Etfw&quot;&gt;#今日のVSCode&lt;/a&gt;&lt;br /&gt;Extensionをながめていたらviemacsというすてきなものがあった。Vim+Emacsである。&lt;a href=&quot;https://t.co/fQgcDc2pgz&quot;&gt;https://t.co/fQgcDc2pgz&lt;/a&gt;&lt;/p&gt;&amp;mdash; 結城浩 (@hyuki) &lt;a href=&quot;https://twitter.com/hyuki/status/1083686907203117056?ref_src=twsrc%5Etfw&quot;&gt;January 11, 2019&lt;/a&gt;&lt;/blockquote&gt;
&lt;script async=&quot;&quot; src=&quot;https://platform.twitter.com/widgets.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;p&gt;なんと、あの結城先生が言及してくれているではないですか！！（感激）&lt;/p&gt;

&lt;hr /&gt;

&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p lang=&quot;ja&quot; dir=&quot;ltr&quot;&gt;VimacsはVimでEmacsｷｰﾊﾞｲﾝﾄﾞを使えるようにするやつだけど、VSCodeでVimのｷｰﾊﾞｲﾝﾄﾞをやるやつは活発に作られてるけど、Emacsのはなんか今いちだから（？）VSCodeのVimプラグインの上に乗っかったVimacsが出てきた…？&lt;/p&gt;&amp;mdash; Hideyuki Tanaka (@tanakh) &lt;a href=&quot;https://twitter.com/tanakh/status/1019622585074503680?ref_src=twsrc%5Etfw&quot;&gt;July 18, 2018&lt;/a&gt;&lt;/blockquote&gt;
&lt;script async=&quot;&quot; src=&quot;https://platform.twitter.com/widgets.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;p&gt;理由はちょっと違いますが・・・&lt;/p&gt;

&lt;hr /&gt;
&lt;p&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=migrs.vimacs&amp;amp;ssr=false#review-details&quot;&gt;&lt;img src=&quot;/assets/images/posts/1bd494a8576c3fe73994e5da7388c81d.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
少ないですがポジティブなレビューはやはり嬉しいものです&lt;/p&gt;
</description>
        <pubDate>Sat, 14 Dec 2019 12:00:00 +0900</pubDate>
        <link>https://m.igrs.jp//blog/2019/12/14/vimacs-for-vscode/</link>
        <guid isPermaLink="true">https://m.igrs.jp//blog/2019/12/14/vimacs-for-vscode/</guid>
        
        
        <category>vscode</category>
        
        <category>vim</category>
        
        <category>emacs</category>
        
        <category>vimacs</category>
        
      </item>
    
      <item>
        <title>Goodbye Vim?</title>
        <description>&lt;p&gt;&lt;a href=&quot;/blog/2018/05/05/goodbye-mac-and-vim/&quot;&gt;前記事&lt;/a&gt;の続き。
Vim に関しては Mac よりも長い付き合いである。&lt;/p&gt;

&lt;p&gt;主にコーディング用のエディターとして GVim をメインに利用してきたが、これまで新しいエディターが出ては試して、そして結局 GVim に戻っての繰り返しだった。&lt;/p&gt;

&lt;p&gt;ここであえてコーディング用としているのは、コーディング用とライティング用とでエディターを使い分けているからである。&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;コーディング用
    &lt;ul&gt;
      &lt;li&gt;プログラミング等&lt;/li&gt;
      &lt;li&gt;全体を眺めて考えたりする時間が長い&lt;/li&gt;
      &lt;li&gt;新規入力より編集が多い&lt;/li&gt;
      &lt;li&gt;日本語の入力が少ない&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;ライティング用
    &lt;ul&gt;
      &lt;li&gt;メール・議事録・メモ等&lt;/li&gt;
      &lt;li&gt;思いついたらすぐ入力&lt;/li&gt;
      &lt;li&gt;新規入力が多い&lt;/li&gt;
      &lt;li&gt;日本語の入力が多い&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ちなみに &lt;a href=&quot;https://www.jetbrains.com/idea/&quot;&gt;IntelliJ IDEA&lt;/a&gt; や &lt;a href=&quot;https://www.eclipse.org/&quot;&gt;Eclipse&lt;/a&gt; などの &lt;a href=&quot;https://ja.wikipedia.org/wiki/%E7%B5%B1%E5%90%88%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83&quot;&gt;IDE&lt;/a&gt; はエディターとして含めていない。IDE とエディターは別物だ。&lt;/p&gt;

&lt;h3 id=&quot;モダンエディターの登場&quot;&gt;モダンエディターの登場&lt;/h3&gt;

&lt;p&gt;Vim / Emacs 以外の選択肢としてのモダンエディター的な存在は &lt;a href=&quot;https://macromates.com/&quot;&gt;TextMate&lt;/a&gt; が走りだったと記憶している。
イケてる Web エンジニアは Mac 使って &lt;a href=&quot;http://rubyonrails.org/&quot;&gt;Ruby on Rails&lt;/a&gt; でアジャイル開発していて、動画で紹介されるチュートリアルではなにやらモダンでいかにも便利そうなエディターを華麗に操り、このエディターとフレームワークさえ使えば誰もが幸せになれるのではないかと世界中のエンジニアが思ったものだが、その時のエディターが TextMate だった。&lt;/p&gt;

&lt;p&gt;以降、登場したモダンエディターとしては以下が代表的なものとして挙げられるだろう。&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://macromates.com/&quot;&gt;TextMate&lt;/a&gt; (2004) Mac Only&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.sublimetext.com/&quot;&gt;Sublime Text&lt;/a&gt; (2008)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://atom.io/&quot;&gt;Atom&lt;/a&gt; (2014)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://code.visualstudio.com/&quot;&gt;Visual Studio Code&lt;/a&gt; (2015)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;どれも Vim に変わる存在としての可能性を探るために、それなりに使っては評価してきたが、1か月も続かないものばかりだった。リリース当初だけの評価ではなく、それぞれ継続的にメジャーバージョンアップが行われる度に乗り換えては評価してきた。&lt;/p&gt;

&lt;h3 id=&quot;コーディング用のエディターに求めること&quot;&gt;コーディング用のエディターに求めること&lt;/h3&gt;

&lt;p&gt;ここで僕がコーディング用のエディターに対して求めることを整理しておくと、以下がポイントとなる。&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Vim キーバインド&lt;/li&gt;
  &lt;li&gt;軽量さ・軽快さ&lt;/li&gt;
  &lt;li&gt;クロスプラットフォーム&lt;/li&gt;
  &lt;li&gt;拡張性&lt;/li&gt;
  &lt;li&gt;将来性&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;そう、僕が一番大切にしているのは Vim ライクな操作ができるかどうかであって、結局 Vim からは脱却できていないのだ。&lt;/p&gt;

&lt;p&gt;なぜ Vim を使い続けてきたかというと一番快適に Vim キーバインドが使えるエディターは Vim だったというだけの理由である。次点で、軽量さ・軽快さ・クロスプラットホームをクリアーしているからだ。
拡張性・将来性に関しては Atom / VS Code あたりの方が高くみえるし、そうみえるから乗り換えようとしている。&lt;/p&gt;

&lt;p&gt;最近のモダンエディターは質の差はあれど Vim ライクなキーバインドを実現するプラグインは大抵存在する。Atom に関してはどうも軽量さ・軽快さに欠けていたので、ひととおり条件をクリアーしてそうなエディターとして VS Code に可能性を求めることにした。（Sublime Text 3 に関しては最近評価できてないのでもしかしたら可能性あるかもしれないけど、現時点ではあまり興味ない）&lt;/p&gt;

&lt;h3 id=&quot;visual-studio-code-の所感&quot;&gt;Visual Studio Code の所感&lt;/h3&gt;

&lt;p&gt;まず軽量さについては、Vim のそれには圧倒的に劣るが他のモダンエディターに比べてもかなり軽い部類だ。拡張性については Vim に比べて用意されている UI コンポーネントが多いこともあって UI 的な表現力が高く、またそれを &lt;a href=&quot;https://www.typescriptlang.org/&quot;&gt;TypeScript&lt;/a&gt; で書けるのは &lt;a href=&quot;https://ja.wikipedia.org/wiki/Vim_script&quot;&gt;Vim script&lt;/a&gt; と異なり馴染みがあってとっかかりやすい。
Vim キーバインドについては &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=vscodevim.vim&quot;&gt;VSCodeVim&lt;/a&gt; がなかなか頑張っていて他エディターの Vim プラグインより出来がよい方だと感じたし、割と違和感なく使えるものになっている。&lt;/p&gt;

&lt;p&gt;総合的な所感としては、Vim を超えているというよりは Vim が無くても生きていける環境がようやくできたという感触。一応コーディング用のエディターに求めるものはひととおり揃っていて、実際ここ1か月くらいはほぼ VS Code だけで生きていけている。&lt;/p&gt;

&lt;p&gt;Visual Studio Code の微妙な点としては、&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;日本語の単語区切りに対応していない&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;VSCodeVim&lt;/em&gt; について
    &lt;ul&gt;
      &lt;li&gt;undo / redo の挙動がおかしい&lt;/li&gt;
      &lt;li&gt;Multi Cursor が考慮されてない&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;などがあって割とツラいのだがなんとかしのいでいる。&lt;/p&gt;

&lt;p&gt;いざとなったら &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=jonsmithers.open-in-vim&quot;&gt;Open in Vim&lt;/a&gt; というプラグインがあるのでいつでも本物の Vim に逃げることはできる。&lt;/p&gt;

&lt;p&gt;なので、暫く VS Code メインで使っていこうとは思っているが Vim も引き続き使っていくことにはなりそうだ。&lt;/p&gt;

&lt;p&gt;Vim は不滅だ。&lt;/p&gt;

&lt;h3 id=&quot;ライティング用のエディターについて&quot;&gt;ライティング用のエディターについて&lt;/h3&gt;

&lt;p&gt;かなり特殊な例なのかもしれないけど、僕はコーディングの時は Vim、メール・メモなどの文章を書く時は Emacs を使いたいのだ。
これもまた本物の Emacs である必要はなくて、Emacs キーバインドが使えれば良いだけなんだけど、これに関しての話もいろいろあるのでまた別記事で書きたいと思う。&lt;/p&gt;
</description>
        <pubDate>Sun, 06 May 2018 12:00:00 +0900</pubDate>
        <link>https://m.igrs.jp//blog/2018/05/06/goodbye-vim/</link>
        <guid isPermaLink="true">https://m.igrs.jp//blog/2018/05/06/goodbye-vim/</guid>
        
        
        <category>vim</category>
        
        <category>vscode</category>
        
      </item>
    
      <item>
        <title>Goodbye Mac and Vim</title>
        <description>&lt;p&gt;趣味的にいろんな OS やエディターに手を出しつつも、わりと長い間 Mac と Vim をメインの開発環境としてきたのだが、ここ最近その牙城が崩れ今ではすっかり &lt;a href=&quot;https://www.ubuntu.com/&quot;&gt;Ubuntu&lt;/a&gt; と &lt;a href=&quot;https://code.visualstudio.com/&quot;&gt;VSCode&lt;/a&gt; 中心な環境にシフトした。&lt;/p&gt;

&lt;p&gt;わりと長い間というのは十数年なので僕のエンジニア人生の大部分を占めることになり、節目感じたので残しておく。&lt;/p&gt;

&lt;h3 id=&quot;mac-に求めていたこと&quot;&gt;Mac に求めていたこと&lt;/h3&gt;

&lt;p&gt;僕が開発環境として求めていたのは一言でいうと、&lt;br /&gt;
&lt;strong&gt;「実用的な GUI を備えた UNIX 互換環境」&lt;/strong&gt;&lt;br /&gt;
である。&lt;/p&gt;

&lt;p&gt;当時(2000年代前半)、Windows + &lt;a href=&quot;https://www.cygwin.com/&quot;&gt;Cygwin&lt;/a&gt; (+ GVim) な環境で頑張っていたのだが、UNIX 互換環境としては制限が多く、一方その点においては完璧な Linux 系 OS も実用的な GUI を備えてなかったので常用するには厳しかった。
そんな中、出てきた OS X(&lt;a href=&quot;https://www.apple.com/jp/macos/&quot;&gt;macOS&lt;/a&gt;)は両者を備えた環境として理想的で魅力的な存在だったし、ついでにカッコよかったので、&lt;a href=&quot;https://ja.wikipedia.org/wiki/Intel_Mac&quot;&gt;Intel Mac&lt;/a&gt; の到来と共に&lt;a href=&quot;http://d.hatena.ne.jp/mig50/20060520/1148772244&quot;&gt;僕は MacBook Pro を購入した&lt;/a&gt;。
そしておそらく同じ理由で世界中の開発者もこぞって Mac を選び始めた。&lt;/p&gt;

&lt;h3 id=&quot;求めるものの変化仮想化とクラウドの時代&quot;&gt;求めるものの変化〜仮想化とクラウドの時代&lt;/h3&gt;

&lt;p&gt;時代と共に仮想化技術が発達し、開発環境として求めるものが UNIX 互換環境からコンテナ実行環境に変わってきた。
&lt;a href=&quot;https://www.docker.com/docker-mac&quot;&gt;Docker for Mac&lt;/a&gt; などの存在はあるもののホストとのファイル共有において速度的なボトルネックが発生してしまうため快適に利用することは難しく、これは Windows においても同様である。
となると選択肢としては Linux 系 OS に限られてきて、 &lt;a href=&quot;https://www.ubuntu.com/&quot;&gt;Ubuntu&lt;/a&gt; でも &lt;a href=&quot;https://www.gentoo.org/&quot;&gt;Gentoo&lt;/a&gt; でも &lt;a href=&quot;https://www.archlinux.org/&quot;&gt;Arch Linux&lt;/a&gt; でもなんでも良いのだが一番使い慣れているということから今は Ubuntu を選択している。
GUI としては、Win / Mac には劣るものの、一昔前に比べて様々なものがクラウド化しブラウザさえあればなんとかなるものが増えてきていることもあって実用性としては低くはない。&lt;/p&gt;

&lt;h3 id=&quot;ハードウェアとしての-mac&quot;&gt;ハードウェアとしての Mac&lt;/h3&gt;

&lt;p&gt;ハードウェアとしての Mac を考えてみると、&lt;a href=&quot;https://developer.apple.com/macos/touch-bar/&quot;&gt;Touch Bar&lt;/a&gt; が搭載されて以降、欲しいと思えるモデルがなくなってしまった。今では大多数の人が Mac を使う世の中になってしまったこともあり所有欲的なものも薄れてきた。
一方、Windows マシンの方がバリエーション豊かでコストパフォーマンスもよく自分にあったマシン探しを楽しめる環境にある。（洗練された良いモデルは少ないが）&lt;/p&gt;

&lt;p&gt;僕が今メインで利用しているのは &lt;a href=&quot;https://www3.lenovo.com/jp/ja/notebooks-new-splitter/ideapad/ideapad-700-series/Ideapad-720S-13-Intel/p/88IP70S0893&quot;&gt;Lenovo ideapad 720S (13.3インチ)&lt;/a&gt; だが 10万円切る価格で十分満足いくボディとスペックである。(できればメモリ16GB欲しいところではあるが)&lt;/p&gt;

&lt;h3 id=&quot;エディターについて&quot;&gt;エディターについて&lt;/h3&gt;

&lt;p&gt;常用エディターを GVim から Visual Studio Code にスイッチした件も書くつもりだったが長くなってきたので別に書くことにする。&lt;/p&gt;
</description>
        <pubDate>Sat, 05 May 2018 12:00:00 +0900</pubDate>
        <link>https://m.igrs.jp//blog/2018/05/05/goodbye-mac-and-vim/</link>
        <guid isPermaLink="true">https://m.igrs.jp//blog/2018/05/05/goodbye-mac-and-vim/</guid>
        
        
        <category>mac</category>
        
        <category>vim</category>
        
        <category>ubuntu</category>
        
        <category>vscode</category>
        
      </item>
    
      <item>
        <title>Setup Jekyll and GitHub Pages Again</title>
        <description>&lt;p&gt;これまで&lt;a href=&quot;https://vps.sakura.ad.jp/&quot;&gt;さくらのVPS&lt;/a&gt;で運用していたのですが、更新忘れて契約が切れいつの間にかサーバ毎消えてしまっていました。
8ヶ月ほどサイトダウンしていたようです。
それまで利用していた &lt;a href=&quot;http://octopress.org/&quot;&gt;Octopress&lt;/a&gt; もすっかり息を潜めたのでこれを気に原点に戻って素の &lt;a href=&quot;https://jekyllrb.com/&quot;&gt;Jekyll&lt;/a&gt; ベースで構築し直しました。&lt;/p&gt;

&lt;!--more--&gt;

&lt;h2 id=&quot;構成&quot;&gt;構成&lt;/h2&gt;

&lt;p&gt;今回はメンテナンスレスにしたかったので &lt;a href=&quot;https://pages.github.com/&quot;&gt;GitHub Pages&lt;/a&gt; でホスティングすることにしました。&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;_site =&amp;gt; ../migrs.github.io&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;のようシンボリックリンク貼って、コンテンツの出力先を GitHub Pages のディレクトリに設定しておき、あとは、&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;記事書いて&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;bundle exec jekyll build&lt;/code&gt; して&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;migrs.github.io&lt;/code&gt; で変更コミットして&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;git push&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;で記事の公開完了です。&lt;/p&gt;

&lt;p&gt;最近、小ネタ溜まってきてるのでちょいちょい更新していこうかなと。&lt;/p&gt;

&lt;h3 id=&quot;リポジトリ&quot;&gt;リポジトリ&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/migrs/m.igrs.jp&quot;&gt;Jekyll プロジェクト&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/migrs/migrs.github.io&quot;&gt;生成されたコンテンツ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Fri, 20 Apr 2018 12:00:00 +0900</pubDate>
        <link>https://m.igrs.jp//blog/2018/04/20/setup-jekyll-and-github-pages/</link>
        <guid isPermaLink="true">https://m.igrs.jp//blog/2018/04/20/setup-jekyll-and-github-pages/</guid>
        
        
        <category>jekyll</category>
        
      </item>
    
      <item>
        <title>Amazon EC2 で複数ホスト一括処理するなら ec2-pssh がとっても便利</title>
        <description>&lt;p&gt;（&lt;a href=&quot;/blog/2013/03/14/ec2-ssh/&quot;&gt;前記事&lt;/a&gt;の続きです）&lt;/p&gt;

&lt;p&gt;複数のホストに対して同時にコマンドを実行するツールはいくつかあるのですが Amazon EC2 向けのものがなさそうだったので作ってみました。&lt;/p&gt;

&lt;h2 id=&quot;できること&quot;&gt;できること&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;とある名前やタグが付いたインスタンスに一括でコマンド発行したり&lt;/li&gt;
  &lt;li&gt;とある Auto Scaling group や ELB に属したインスタンスのログを同時に眺めたり&lt;/li&gt;
  &lt;li&gt;とあるグループのインスタンス内の特定ファイルを一度に収集したり&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;いろいろ便利なことが簡単に実現できます。&lt;/p&gt;

&lt;!-- more --&gt;

&lt;h2 id=&quot;parallel-ssh&quot;&gt;Parallel SSH&lt;/h2&gt;

&lt;p&gt;まず前提として &lt;a href=&quot;https://code.google.com/p/parallel-ssh/&quot;&gt;PSSH: Parallel SSH Tools&lt;/a&gt; を利用するので詳しくは pssh について詳しいページを参照のこと。&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://blog.livedoor.jp/hakin/archives/51652847.html&quot;&gt;Parallel ssh (pssh)で複数ホストでコマンド同時実行&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://pocketstudio.jp/log3/2013/06/04/pssh-pararell-ssh-command-line-tool/&quot;&gt;pssh(pararell-ssh)で複数サーバの同時操作&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Mac 環境なら &lt;code class=&quot;highlighter-rouge&quot;&gt;sudo easy_isntall pssh&lt;/code&gt; で入ります。&lt;/p&gt;

&lt;p&gt;思想としては &lt;a href=&quot;/blog/2013/03/14/ec2-ssh/&quot;&gt;ec2-ssh&lt;/a&gt; と同じく極力シンプルにするため pssh の単純なラッパーコマンドとして実装しており利用方法やパラメータ等は pssh 互換です。
一括処理するグループを指定するためオプションだけを加えてます。&lt;/p&gt;

&lt;h2 id=&quot;オプション&quot;&gt;オプション&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;-S / --as&lt;/code&gt; : Auto Scaling グループ名を指定&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;-N / --name&lt;/code&gt; : インスタンス名を指定(同じ名前のインスタンスが複数ある場合)&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;-T / --tag&lt;/code&gt; : タグを指定 (Key=Value)&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;-F / --filter&lt;/code&gt; : フィルタを直接指定 see. &lt;a href=&quot;http://docs.aws.amazon.com/AWSEC2/latest/CommandLineReference/ApiReference-cmd-DescribeInstances.html&quot;&gt;ec2-describe-instances&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;-L / --elb&lt;/code&gt; : ロードバランサー名を指定&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;使い方&quot;&gt;使い方&lt;/h2&gt;

&lt;p&gt;ロードバランサー lb-web 配下に属するサーバ群のアクセスログを同時に眺める&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ec2-pssh -L lb-web -P tail -f /var/log/nginx/access.log
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Auto Scaling グループ名 as-api に属するサーバ群の負荷状況をリアルタイムで確認&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ec2-pssh -S as-api -P vmstat 1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;api という名前が付いたサーバのディスク利用率を一度に確認&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ec2-pssh -N api -i df -h
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;等々&lt;/p&gt;

&lt;h2 id=&quot;他の-pssh-コマンド群&quot;&gt;他の PSSH コマンド群&lt;/h2&gt;

&lt;p&gt;Parallel SSH Tools には pssh 以外にもいくつか便利コマンドが用意されているのですが、それらのラッパーも用意しました。&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;ec2-pscp (一括ファイル送信)&lt;/li&gt;
  &lt;li&gt;ec2-pslurp (一括ファイル収集)&lt;/li&gt;
  &lt;li&gt;ec2-prsync (一括ファイル同期)&lt;/li&gt;
  &lt;li&gt;ec2-pnuke (一括プロセス終了 pkill)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;一括ファイル送信&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ec2-pssh -N api -i df -h
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;一括ファイル収集&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ec2-pssh -N api -i df -h
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;その他の付属コマンド&quot;&gt;その他の付属コマンド&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;ec2-ssh (&lt;a href=&quot;/blog/2013/03/14/ec2-ssh/&quot;&gt;前記事&lt;/a&gt;参照)&lt;/li&gt;
  &lt;li&gt;ec2-host (インスタンス名解決)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;hoge という名前の付いたインスタンスは誰？&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ec2-host hoge
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Auto Scaling グループ名 as-api に属する全てのサーバ名を取得&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ec2-host -S as-api
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;ec2-host は他のコマンドとの組み合わせて使うと便利です。&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;cat ~/.ssh/id_rsa.pub | ssh -i ~/ec2.pem ec2-user@`ec2-host hoge` 'cat &amp;gt;&amp;gt; ~/.ssh/authorized_keys'
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
</description>
        <pubDate>Mon, 17 Feb 2014 10:00:00 +0900</pubDate>
        <link>https://m.igrs.jp//blog/2014/02/17/ec2-pssh/</link>
        <guid isPermaLink="true">https://m.igrs.jp//blog/2014/02/17/ec2-pssh/</guid>
        
        
        <category>aws</category>
        
        <category>ec2</category>
        
      </item>
    
      <item>
        <title>Amazon EC2 で SSH するなら ec2-ssh が便利</title>
        <description>&lt;p&gt;AWSを本格的に使い始めて約3ヶ月になる新参者です。
便利過ぎて今までの時間を返して欲しいくらいなのですが過ぎたものは仕方ないので前に進みましょう。&lt;/p&gt;

&lt;p&gt;&lt;img class=&quot;center&quot; src=&quot;http://f.cl.ly/items/0A1P0K2j1S2G2N033n3D/ec2-ssh.png&quot; width=&quot;464&quot; height=&quot;207&quot; alt=&quot;ec2-ssh&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;ec2-への-ssh-接続&quot;&gt;EC2 への SSH 接続&lt;/h2&gt;
&lt;p&gt;Amazon EC2 上のインスタンスにSSH接続するベーシックな方法は&lt;/p&gt;

&lt;div class=&quot;language-sh highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ssh &lt;span class=&quot;nt&quot;&gt;-i&lt;/span&gt; /path/to/pk.pem ec2-user@ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;ですが、これでは何のサーバに接続しているのかさっぱり分からないのでこのまま運用している人はまずいないでしょう。
(AWS Management Console から毎回コピペでがんばっている人はいそう)&lt;/p&gt;

&lt;h3 id=&quot;sshconfig&quot;&gt;~/.ssh/config&lt;/h3&gt;

&lt;p&gt;おそらく多くの人は &lt;code class=&quot;highlighter-rouge&quot;&gt;~/.ssh/config&lt;/code&gt; の設定にそれぞれ工夫を凝らしているのかと思われますが、
インスタンス数が増えてくると &lt;code class=&quot;highlighter-rouge&quot;&gt;~/.ssh/config&lt;/code&gt; の更新も煩わしくなります。
また Auto Scaling 等のダイナミックな運用になるととても追いつきません。&lt;/p&gt;

&lt;h2 id=&quot;既存サポートツール&quot;&gt;既存サポートツール&lt;/h2&gt;
&lt;!-- more --&gt;

&lt;h3 id=&quot;ec2ssh&quot;&gt;ec2ssh&lt;/h3&gt;
&lt;p&gt;その煩わしさを解消するツールとして &lt;a href=&quot;https://github.com/mirakui/ec2ssh&quot;&gt;ec2ssh&lt;/a&gt; という
&lt;code class=&quot;highlighter-rouge&quot;&gt;~/.ssh/config&lt;/code&gt; の更新を半自動化してくれるものがあります。
(see. &lt;a href=&quot;http://blog.mirakui.com/entry/20101205/1291551625&quot;&gt;Amazon EC2インスタンスに簡単にSSHできるようになるツールec2sshを公開しました&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;ただこれもコマンド一発とはいえ更新作業が必要になり、私にはこれも煩わしく感じました。
更新を忘れると期待と異なるサーバにアクセスしてしまう可能性もあります。&lt;/p&gt;

&lt;h3 id=&quot;ec2-ssh&quot;&gt;ec2-ssh&lt;/h3&gt;
&lt;p&gt;そこで登場するのが &lt;a href=&quot;https://github.com/Instagram/ec2-ssh&quot;&gt;ec2-ssh&lt;/a&gt; です。(が、まだ本題ではありません！)&lt;/p&gt;

&lt;p&gt;これは &lt;a href=&quot;http://instagram.com&quot;&gt;Instagram&lt;/a&gt; エンジニアが作ったツールで
&lt;code class=&quot;highlighter-rouge&quot;&gt;~/.ssh/config&lt;/code&gt; の編集無しにダイナミックに解決するタイプになります。
(see. &lt;a href=&quot;http://instagram-engineering.tumblr.com/post/11399488246/simplifying-ec2-ssh-connections&quot;&gt;Simplifying EC2 SSH Connections&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;私の趣味的にはこちらの方がマッチしていたので2,3日使ってみたのですが、以下の点で不満がありました。&lt;/p&gt;

&lt;h4 id=&quot;不満点&quot;&gt;不満点&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;ssh のオプションと互換性がない&lt;/li&gt;
  &lt;li&gt;ユーザ名を省略した時に &lt;code class=&quot;highlighter-rouge&quot;&gt;~/.ssh/config&lt;/code&gt; の &lt;code class=&quot;highlighter-rouge&quot;&gt;User&lt;/code&gt; 設定が有効にならない&lt;/li&gt;
  &lt;li&gt;Python が必要&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;別に Python が嫌なわけではなくてシェルスクリプトで十分に書けるものなのにわざわざ
依存関係を増やしたくないというだけです。&lt;/p&gt;

&lt;h2 id=&quot;やっと本題-作ってみた&quot;&gt;(やっと本題) 作ってみた&lt;/h2&gt;
&lt;p&gt;というわけで、仕様・実装ともにもっとシンプルにした yet another ec2-ssh を作ってみました。&lt;/p&gt;

&lt;h3 id=&quot;特徴&quot;&gt;特徴&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;~/.ssh/config&lt;/code&gt; の更新不要&lt;/li&gt;
  &lt;li&gt;ssh の単なるラッパーなので ssh と全く同じように利用可能
    &lt;ul&gt;
      &lt;li&gt;ホスト名の部分を解決して置換しているだけ&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Pure シェルスクリプト No Requirements
    &lt;ul&gt;
      &lt;li&gt;ただしWindowsは考慮してません。Cygwin とかなら多分動く。&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;同じ名前が付いたインスタンスへの接続にも対応&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;インストール&quot;&gt;インストール&lt;/h3&gt;

&lt;h4 id=&quot;ec2-api-tools&quot;&gt;ec2-api-tools&lt;/h4&gt;

&lt;p&gt;まず前提として &lt;a href=&quot;http://aws.amazon.com/developertools/351&quot;&gt;ec2-api-tools&lt;/a&gt; が動く
環境になっていることが求められますが AWS 使っている人であれば設定済みでしょう。&lt;/p&gt;

&lt;p&gt;利用するコマンドは &lt;code class=&quot;highlighter-rouge&quot;&gt;ec2-describe-instances&lt;/code&gt; のみです。&lt;/p&gt;

&lt;p&gt;Mac なら、&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;brew install ec2-api-tools
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;で OK。&lt;/p&gt;

&lt;p&gt;環境変数で以下を適切に設定すれば動くはずです。&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;AWS_ACCESS_KEY&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;AWS_SECRET_KEY&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;EC2_HOME&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;EC2_URL&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;EC2_REGION&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;ec2-ssh-1&quot;&gt;ec2-ssh&lt;/h4&gt;

&lt;p&gt;gist に置きました。&lt;a href=&quot;https://gist.github.com/migrs/5157665&quot;&gt;ec2-ssh&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;まだパッケージングしてないけどシェルスクリプト1つなので以下のような手順で。&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;wget https://gist.github.com/migrs/5157665/raw/736e5940279ba92040400d21071b0cf6a392ce5d/ec2-ssh -P /path/to/bin/
chmod +x /path/to/bin/ec2-ssh
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;利用方法&quot;&gt;利用方法&lt;/h3&gt;

&lt;p&gt;web1 という名前がついたサーバにSSH接続&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ec2-ssh web1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;ユーザ名を指定&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ec2-ssh jonny@web1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;同名インスタンスへの接続。上から3番目(作成順)。&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ec2-ssh web#3
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;ポートフォワーディング&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ec2-ssh -L 8080:127.0.0.1:80 web1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;コマンド直接実行&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ec2-ssh web1 ls -la
ec2-ssh web1 tail -f /var/log/nginx/access.log
ec2-ssh web1 vmstat 1
ec2-ssh web1 -t top
ec2-ssh web1 -t sudo service nginx restart
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;いい感じですね。&lt;/p&gt;

&lt;h2 id=&quot;続き&quot;&gt;続き&lt;/h2&gt;
&lt;p&gt;新参なので知らないだけなのかもしれません。
もっと良い何かがあったら是非教えてください。&lt;/p&gt;

&lt;p&gt;この記事には続きがあります。もっと便利な何かを紹介します。&lt;/p&gt;
</description>
        <pubDate>Thu, 14 Mar 2013 09:00:00 +0900</pubDate>
        <link>https://m.igrs.jp//blog/2013/03/14/ec2-ssh/</link>
        <guid isPermaLink="true">https://m.igrs.jp//blog/2013/03/14/ec2-ssh/</guid>
        
        
        <category>aws</category>
        
        <category>ec2</category>
        
      </item>
    
      <item>
        <title>LL Decade 参加者向け - 銀座ブロッサム周辺ランチ情報</title>
        <description>&lt;p&gt;来たる8月4日に &lt;a href=&quot;http://ll.jus.or.jp/2012/&quot;&gt;LL Decade&lt;/a&gt; が&lt;a href=&quot;http://www.ginza-blossom.jp/&quot;&gt;銀座ブロッサム&lt;/a&gt;にて開催されます。&lt;/p&gt;

&lt;p&gt;&lt;img class=&quot;center&quot; src=&quot;http://f.cl.ly/items/0H2R1l3o3D0A071p1o2i/blossom-map.png&quot; width=&quot;494&quot; height=&quot;165&quot; alt=&quot;Ginza Blossom Map&quot; /&gt;&lt;/p&gt;

&lt;p&gt;ただ場所的に少し問題がありまして近隣で住んだり働いたりしたことがある人なら分かると思いますがもともと飲食店が少ないエリアな上に土日営業してない店が多いのです。
少し歩いて飲食店を探しに行くことになるはずですが、行く方向間違えれば確実にランチ難民になるでしょう。&lt;/p&gt;

&lt;p&gt;ということで&lt;a href=&quot;https://maps.google.co.jp/maps/ms?msa=0&amp;amp;msid=201424146758768741852.0004c53e96f9394c5f5f1&amp;amp;brcurrent=3,0x60188bdf2c891475:0xa0a942a1368b185,0&amp;amp;ie=UTF8&amp;amp;t=m&amp;amp;ll=35.671469,139.770792&amp;amp;spn=0.004184,0.006866&amp;amp;z=17&amp;amp;source=embed&quot; style=&quot;color:#0000FF;text-align:left&quot;&gt;銀座ブロッサム周辺で土曜日にランチ営業している飲食店&lt;/a&gt;マップを作ってみました。&lt;/p&gt;

&lt;!-- more --&gt;

&lt;div style=&quot;margin-bottom:1em;&quot;&gt;
&lt;iframe width=&quot;640&quot; height=&quot;480&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; src=&quot;https://maps.google.co.jp/maps/ms?msa=0&amp;amp;msid=201424146758768741852.0004c53e96f9394c5f5f1&amp;amp;brcurrent=3,0x60188bdf2c891475:0xa0a942a1368b185,0&amp;amp;ie=UTF8&amp;amp;t=m&amp;amp;ll=35.671469,139.770792&amp;amp;spn=0.004184,0.006866&amp;amp;z=17&amp;amp;output=embed&quot;&gt;&lt;/iframe&gt;
&lt;div style=&quot;font-size:small;&quot;&gt;
&lt;span&gt;&lt;img style=&quot;border:none;&quot; width=&quot;16&quot; height=&quot;16&quot; src=&quot;http://maps.google.co.jp/mapfiles/ms/icons/red.png&quot; /&gt;中華・韓国&lt;/span&gt;
&lt;span&gt;&lt;img style=&quot;border:none;&quot; width=&quot;16&quot; height=&quot;16&quot; src=&quot;http://maps.google.co.jp/mapfiles/ms/icons/green.png&quot; /&gt;定食・和食・寿司&lt;/span&gt;
&lt;span&gt;&lt;img style=&quot;border:none;&quot; width=&quot;16&quot; height=&quot;16&quot; src=&quot;http://maps.google.co.jp/mapfiles/ms/icons/pink.png&quot; /&gt;洋食&lt;/span&gt;
&lt;span&gt;&lt;img style=&quot;border:none;&quot; width=&quot;16&quot; height=&quot;16&quot; src=&quot;http://maps.google.co.jp/mapfiles/ms/icons/lightblue.png&quot; /&gt;ラーメン&lt;/span&gt;
&lt;span&gt;&lt;img style=&quot;border:none;&quot; width=&quot;16&quot; height=&quot;16&quot; src=&quot;http://maps.google.co.jp/mapfiles/ms/icons/yellow.png&quot; /&gt;カレー&lt;/span&gt;
&lt;span&gt;&lt;img style=&quot;border:none;&quot; width=&quot;16&quot; height=&quot;16&quot; src=&quot;http://maps.google.co.jp/mapfiles/ms/icons/blue.png&quot; /&gt;カフェ&lt;/span&gt;
&lt;span&gt;&lt;img style=&quot;border:none;&quot; width=&quot;16&quot; height=&quot;16&quot; src=&quot;http://maps.google.co.jp/mapfiles/ms/icons/purple.png&quot; /&gt;ファストフード&lt;/span&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;こうやって見ると多く感じますが、銀座ブロッサム中心半径約150mは空洞化してるのが分かると思います。
しかも近めはお高めの店が多いので注意が必要です。&lt;/p&gt;

&lt;p&gt;おすすめエリアは&lt;a href=&quot;http://goo.gl/maps/7AmO&quot;&gt;歌舞伎座周辺&lt;/a&gt;と&lt;a href=&quot;http://goo.gl/maps/VLey&quot;&gt;ウィンズ銀座周辺&lt;/a&gt;です。
ちょっと余裕があれば&lt;a href=&quot;http://goo.gl/maps/AngE&quot;&gt;築地場外市場&lt;/a&gt;(徒歩約10分)まで足を伸ばしても良いでしょう。土曜の場外は活気があって面白いと思います(その分混雑しているので注意)。
もちろん中央通り付近まで行けば迷う程お店あります。&lt;/p&gt;

&lt;p&gt;場所柄高めなレストランも多いのですが一応そこまで高くない店をピックアップしているつもり。
とある土曜日のお昼時に撮影した外観写真と食べログへのリンクを貼っているので参考まで。
黒いドットが付いてる店は個人的にお勧めな店に付けようと思ったのですが適当なのであまり気にしないでください。&lt;/p&gt;

&lt;p&gt;腹が減っては何とやら、無事美味しいランチに辿りつけることを心よりお祈りしております。&lt;/p&gt;
</description>
        <pubDate>Tue, 24 Jul 2012 08:00:00 +0900</pubDate>
        <link>https://m.igrs.jp//blog/2012/07/24/lldecade-lunch-spots/</link>
        <guid isPermaLink="true">https://m.igrs.jp//blog/2012/07/24/lldecade-lunch-spots/</guid>
        
        
        <category>lunch</category>
        
        <category>ginza</category>
        
      </item>
    
      <item>
        <title>フジロックより安い！Jisan Valley Rock Festival に行こう 2012</title>
        <description>&lt;h4 id=&quot;更新情報&quot;&gt;更新情報&lt;/h4&gt;

&lt;h5 id=&quot;720-更新&quot;&gt;7/20 更新&lt;/h5&gt;

&lt;p&gt;前回情報いただいた現地在住の&lt;a href=&quot;http://orshig.blog101.fc2.com/&quot;&gt;ゆるゆるはんぐく&lt;/a&gt;さんのページにてさらに詳しい情報が紹介されていますので掲載させていただきます。&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://orshig.blog101.fc2.com/blog-entry-89.html&quot;&gt;Jisan valley rock festivalの手引き1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://orshig.blog101.fc2.com/blog-entry-90.html&quot;&gt;Jisan valley rock festivalの手引き2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h5 id=&quot;710-更新&quot;&gt;7/10 更新&lt;/h5&gt;

&lt;p&gt;専用シャトルバスがあるようなのでアクセス方法について更新しました。
キャンプ道具も一式レンタルできるそうです。
(&lt;a href=&quot;http://twitter.com/yuruyuruhanguk&quot;&gt;韓国にお住まいの方&lt;/a&gt;から情報いただきました。ありがとうございます！)&lt;/p&gt;

&lt;h2 id=&quot;fuji-rock-festival-2012&quot;&gt;FUJI ROCK FESTIVAL 2012&lt;/h2&gt;

&lt;p&gt;&lt;img class=&quot;center&quot; src=&quot;http://f.cl.ly/items/3N050N3O0U3a082B2l1V/FRF12_logo.jpg&quot; width=&quot;350&quot; height=&quot;235&quot; alt=&quot;Fuji Rock Festival 2012&quot; /&gt;&lt;/p&gt;

&lt;p&gt;今年は&lt;a href=&quot;http://www.fujirockfestival.com/news/?id=1275&quot;&gt;異例の開催発表&lt;/a&gt;で話題になった &lt;a href=&quot;http://www.fujirockfestival.com/&quot;&gt;FUJI ROCK&lt;/a&gt; ですがいよいよ今月末まで迫ってきました。&lt;/p&gt;

&lt;p&gt;なんと言っても今年の目玉は&lt;a href=&quot;http://oops-music.com/news.php?nid=69879/&quot;&gt;奇跡の再結成&lt;/a&gt;を果した&lt;a href=&quot;http://www.thestoneroses.org/&quot;&gt;THE STONE ROSES&lt;/a&gt;と実は&lt;a href=&quot;http://natalie.mu/music/news/62579&quot;&gt;FUJI ROCK 初出演&lt;/a&gt;となる&lt;a href=&quot;http://radiohead.com/&quot;&gt;RADIOHEAD&lt;/a&gt;でしょう。
他にもたくさん魅力的なアーティストが目白押しなので非常に楽しみなのですが、毎度ながらかなりお高いですよね。。&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.fujirockfestival.com/ticket/&quot;&gt;FUJI ROCK チケット情報&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;1日券: 17,800円 (先行販売 16,800円)&lt;/li&gt;
      &lt;li&gt;3日券: 42,800円 (先行販売 39,800円)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;毎年では無いものの結構参戦しているのですがここ最近は一日に焦点絞っての参加になることが多いです。(お値段以上の価値があるイベントだとは思いますが)&lt;/p&gt;

&lt;h2 id=&quot;jisan-valley-rock-festival-2012&quot;&gt;JISAN VALLEY ROCK FESTIVAL 2012&lt;/h2&gt;

&lt;p&gt;ここで本題。
海を渡ったお隣韓国でも FUJI ROCK とまったく同じ日程(7/27-29)でフェスが開催されます。&lt;/p&gt;

&lt;!-- more --&gt;

&lt;p&gt;&lt;img class=&quot;center&quot; src=&quot;http://f.cl.ly/items/3b0q2h3k3E0M0d3U1142/jisan-valley-rock-festival-2012.jpg&quot; width=&quot;600&quot; height=&quot;530&quot; alt=&quot;Jisan Valley Rock Festival 2012&quot; /&gt;
&lt;a href=&quot;http://www.valleyrockfestival.com/&quot;&gt;Jisan Valley Rock Festival 2012&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;このフェスは FUJI ROCK 主催の&lt;a href=&quot;http://smash-jpn.com/&quot;&gt;スマッシュ&lt;/a&gt;と連携しており、FUJI ROCK に出演するアーティストの多くがこちらにも出演するのです。
画像にもデカデカと書いてますが上記2大アーディストも出演が決まっており、RADIOHEAD に関しては韓国初上陸とのこと。&lt;/p&gt;

&lt;p&gt;そしてそのチケット代が円高も相まって非常にお値打ち価格なのです。&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.mnetjapan.com/valleyrockfestival/ticket.m&quot;&gt;JVRF チケット情報&lt;/a&gt; (100ウォン = 7円換算)
    &lt;ul&gt;
      &lt;li&gt;1日券: 140,000ウォン (約 9,800円)&lt;/li&gt;
      &lt;li&gt;3日券: 225,000ウォン (約 15,750円)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;3日券に関しては半額以下で&lt;strong&gt;6割以上&lt;/strong&gt;も安いことになります。&lt;/p&gt;

&lt;p&gt;その差額があれば格安航空券等を利用することで交通費も賄えます。&lt;br /&gt;
&lt;a href=&quot;http://www.ne.jp/asahi/category/info/airticket/korea.html&quot;&gt;韓国(ソウル)の格安航空券/旅行相場&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;苗場に向うにしてもそれなりの交通費(上越新幹線自由席 東京-越後湯沢 往復 11,960円)がかかるので、これは検討してみる価値がありそうです。&lt;/p&gt;

&lt;p&gt;フェスのついでに韓国旅行も楽しんじゃおう！というノリならさらにお得に思えてくるわけで、
もちろん規模も出演アーティストも FUJI ROCK の方が圧倒的に上なのですが、最低限この2バンドが拝めれば良いと思っている私のような人にとっては非常に魅力的です。&lt;/p&gt;

&lt;p&gt;というわけで、本格的に行ってみようと先月末くらい思い立ちいろいろ調べて始めてみました。(遅いって・・・)&lt;/p&gt;

&lt;h2 id=&quot;現地情報&quot;&gt;現地情報&lt;/h2&gt;

&lt;h3 id=&quot;開催場所&quot;&gt;開催場所&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://japanese.gg.go.kr/global/main.do?lang=JPN&quot;&gt;京畿道&lt;/a&gt;(キョンギド)&lt;a href=&quot;http://www.icheon.go.kr/site/japan/main.do&quot;&gt;利川市&lt;/a&gt;(イチョンシ)にあるスキー場 &lt;a href=&quot;http://www.jisanresort.co.kr/&quot;&gt;Jisan Forest Resort&lt;/a&gt; で開催されます。
FUJI ROCK が&lt;a href=&quot;http://www.princehotels.co.jp/ski/naeba/&quot;&gt;苗場スキー場&lt;/a&gt;で開催されるのと同じ感覚ですが、都心(ソウル市内)からの距離で比べるとより近いようです。
(&lt;a href=&quot;http://www.mnetjapan.com/valleyrockfestival/location.m&quot;&gt;会場へのアクセス情報&lt;/a&gt;)&lt;/p&gt;

&lt;h4 id=&quot;アクセス方法&quot;&gt;アクセス方法&lt;/h4&gt;

&lt;p&gt;&lt;del&gt;以前までは専用シャトルバスがあったようなのですが今年は無くなってしまったようです。&lt;/del&gt;
&lt;del&gt;交通手段としては、公共交通機関(バス)か車(レンタカー)のどちらかになります。&lt;/del&gt;
&lt;del&gt;(※現状どちらにするかは決めかねてます)&lt;/del&gt;&lt;/p&gt;

&lt;p&gt;専用シャトルバスについて韓国語の公式サイトの方に告知されていました。(英語・日本語のサイトは更新されてません。)&lt;br /&gt;
なので現地に向かうにはシャトルバスが一番良いでしょう。&lt;/p&gt;

&lt;h5 id=&quot;専用シャトルバス&quot;&gt;専用シャトルバス&lt;/h5&gt;

&lt;table&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;http://valleyrockfestival.mnet.com/2012/news.asp?seq=79520&quot;&gt;7/5 [お知らせ]シャトルのご案内と予約申込&lt;/a&gt;([Google 翻訳](http://translate.google.com/translate?u=http%3A%2F%2Fvalleyrockfestival.mnet.com%2F2012%2Fnews.asp%3Fseq%3D79520&amp;amp;hl=ja&amp;amp;langpair=auto&lt;/td&gt;
      &lt;td&gt;ja&amp;amp;tbb=1&amp;amp;ie=UTF-8))&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&lt;a href=&quot;http://valleyrockfestival.mnet.com/2012/file_down5.asp&quot;&gt;予約フォームをダウンロード&lt;/a&gt;し入力したものをメールで添付して送ることで予約申込となるようです。
メール予約から3日以内に指定口座に料金を振り込む必要があります。料金は往復 22,000ウォン(約1,540円)です。 (振込方法については、あとで書く)&lt;/p&gt;

&lt;h5 id=&quot;公共交通機関バス&quot;&gt;公共交通機関(バス)&lt;/h5&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;http://www.seoulnavi.com/miru/193/&quot;&gt;東ソウルターミナル&lt;/a&gt;から 利川(이천 イチョン)行きバス に乗って &lt;a href=&quot;http://www.seoulnavi.com/miru/1429/&quot;&gt;利川市外バスターミナル&lt;/a&gt; に向います。&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;頻繁(約15分毎?)に運行されている(未確認情報)&lt;/li&gt;
      &lt;li&gt;所要時間は約1時間&lt;/li&gt;
      &lt;li&gt;運賃は 3,800ウォン(約266円) くらい？(未確認情報)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;http://www.seoulnavi.com/miru/1429/&quot;&gt;利川市外バスターミナル&lt;/a&gt;から 12蕃バスに乗って ジサンマートで下車&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;比較的頻繁(約30分毎?)に運行されている(未確認情報)&lt;/li&gt;
      &lt;li&gt;所要時間は約40分&lt;/li&gt;
      &lt;li&gt;運賃は 1,200ウォン(約84円) くらい？(未確認情報)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;運賃に関しては非常に安いので気にする必要はなさそうです。
ただし利川市まで入ってしまうと日本語はもちろん英語の案内も無く現地の方もほぼ話せないと思った方が良いらしい。
目的地をハングルでメモっておいた方が良いでしょう。&lt;/p&gt;

&lt;p&gt;また、韓国はタクシー料金が安く、利川市外バスターミナルから会場まではタクシーで向うのが良いかもしれないとのアドバイスも貰いました。(約3,000-5,000ウォン 約200-300円)&lt;/p&gt;

&lt;p&gt;ただ行きは良いのですが帰りが問題です。
終バスの時刻は21時台のようなので、その頃は一番の目的のアーティストが絶賛演奏中である可能性が高く帰れそうにありません。
(タイムテーブルまだでてない。でるのか？)&lt;/p&gt;

&lt;p&gt;そうなると現地で夜を明かすことになるのですが現地宿泊情報は後述します。&lt;/p&gt;

&lt;h5 id=&quot;車レンタカー&quot;&gt;車(レンタカー)&lt;/h5&gt;

&lt;p&gt;国際運転免許証取得して現地で &lt;a href=&quot;http://www.hertz.com/&quot;&gt;Hertz&lt;/a&gt; あたりで借りてあとは iPhone の力でなんとか会場まで辿り着けるでしょう。(ちゃんと調べてないので適当)&lt;br /&gt;
車なら帰りも心配ありません。&lt;br /&gt;
ただ韓国の運転マナーは非常に悪いらしくどのガイドブックでもお勧めしてないそうです。&lt;/p&gt;

&lt;h2 id=&quot;必要な手配&quot;&gt;必要な手配&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;JVRF 2012 チケット購入&lt;/li&gt;
  &lt;li&gt;航空券の手配&lt;/li&gt;
  &lt;li&gt;宿の確保&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;jvrf-2012-チケット購入&quot;&gt;JVRF 2012 チケット購入&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://www.mnetjapan.com/valleyrockfestival/ticket.m&quot;&gt;公式のチケット案内&lt;/a&gt; から予約販売先へのリンクがあるので、
好きなところから予約するのが良いですが、英語なのは以下の二つだけのようです。&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://ticket.yes24.com/Home/PerfFN/PerfDetailInfoFN.aspx?IdPerf=11904&quot;&gt;YES24.COM&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://ticket.interpark.com/Global/Play/Goods/GoodsInfo.asp?GoodsCode=12005724&quot;&gt;INTERPARK&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;注意点として YES24.COM は Windows でないと決済できない仕組みを使ってます。INTERPARK の方はまだ試してません。&lt;/p&gt;

&lt;p&gt;チケットは会場にてIDと引き換えに渡されるようです。&lt;/p&gt;

&lt;h3 id=&quot;航空券の手配&quot;&gt;航空券の手配&lt;/h3&gt;

&lt;p&gt;適当に手配しましょう。
羽田発で便確定の一番安いチケットだと一人往復28,000円(燃油サーチャージ・空港使用料等込み)くらいです。&lt;/p&gt;

&lt;h3 id=&quot;宿の確保&quot;&gt;宿の確保&lt;/h3&gt;

&lt;p&gt;こちらも適当に。半分観光目的なので&lt;del&gt;便利な&lt;a href=&quot;http://www.seoulnavi.com/area/detail.php?area_id=3&quot;&gt;明洞&lt;/a&gt;周辺&lt;/del&gt;(明洞周辺はちょっとお高めだったので&lt;a href=&quot;http://www.seoulnavi.com/matome/190078&quot;&gt;麻浦エリア&lt;/a&gt;にしました)に宿泊予定です。&lt;br /&gt;
パックツアーを利用し航空券と合わせて手配するのも良いでしょう。&lt;/p&gt;

&lt;h4 id=&quot;会場周辺宿泊情報&quot;&gt;会場周辺宿泊情報&lt;/h4&gt;

&lt;p&gt;もし会場から帰れなくなったらですが、会場周辺で何とかしなければいけません。&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;おそらく朝までやってるので、徹夜でフェスに参加する&lt;/li&gt;
  &lt;li&gt;キャンプする
    &lt;ul&gt;
      &lt;li&gt;キャンピングチケット付を購入することでキャンプができます&lt;/li&gt;
      &lt;li&gt;&lt;del&gt;ただキャンプ設備を持って行けないので非現実的かと(韓国の知り合いと一緒にならアリ)&lt;/del&gt;&lt;/li&gt;
      &lt;li&gt;キャンプ道具一式のレンタルとオプションでテントの設営までできるそうです&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.jisanresort.co.kr/jpn/condo01_01.html&quot;&gt;JISAN FOREST RESORT&lt;/a&gt; で宿泊
    &lt;ul&gt;
      &lt;li&gt;問合せたがキャンセル待ちとのこと&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.pineresort.com/yangji_eng/index.html&quot;&gt;YANGJI PINE RESORT&lt;/a&gt; で宿泊
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;http://ticket.yes24.com/Home/PerfFN/PerfDetailInfoFN.aspx?IdPerf=11904&quot;&gt;公式に宿泊案内あり&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;送迎バス付&lt;/li&gt;
      &lt;li&gt;予約状況は未確認&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;サウナ(ジンジルバン)に宿泊 (&lt;a href=&quot;http://naturalresort.co.kr/&quot;&gt;Anseong Natural Resort&lt;/a&gt;)
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;http://ticket.yes24.com/Home/PerfFN/PerfDetailInfoFN.aspx?IdPerf=11904&quot;&gt;公式に宿泊案内あり&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;送迎バス付で一泊 20,000ウォン(約1,400円)&lt;/li&gt;
      &lt;li&gt;最終日は 15,000ウォン(約1,050円)(Sauna -&amp;gt; Fes Site の移動が無いので安い)&lt;/li&gt;
      &lt;li&gt;深夜 1:00 に会場まで迎えにきてくれる。(朝は 9:00 出発)&lt;/li&gt;
      &lt;li&gt;まだ予約可能だが、この予約が大変(後述)。&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h5 id=&quot;サウナジンジルバンの予約&quot;&gt;サウナ(ジンジルバン)の予約&lt;/h5&gt;

&lt;p&gt;&lt;a href=&quot;http://naturalresort.co.kr/&quot;&gt;Anseong Natural Resort&lt;/a&gt; のサイトを見てもらえれば分かると思いますが、
日本語はもちろん英語による案内もなく途方に暮れてしまいます。&lt;/p&gt;

&lt;p&gt;そこで、&lt;a href=&quot;http://japanese.gg.go.kr/global/contents.do?lang=JPN&amp;amp;pageCode=1211&quot;&gt;京畿道のコールセンター&lt;/a&gt;が日本語での対応可能らしいので JVRF の宿泊情報についてダメモトで問合せてみました。
すると非常に親切に対応してくれて、その担当者を経由して三者通話的に会話することでサウナの予約をすることができました。&lt;/p&gt;

&lt;p&gt;あとは銀行の振込を持って予約完了というところまで来たけど、今まで韓国の銀行口座に振り込んだことなど無い。。
幸い振込先の&lt;a href=&quot;http://www.hanabank.com/&quot;&gt;ハナ銀行&lt;/a&gt;の支店が丸の内にあったので問合せることができました。
振込方法については次で。&lt;/p&gt;

&lt;h2 id=&quot;韓国への送金方法&quot;&gt;韓国への送金方法&lt;/h2&gt;

&lt;p&gt;専用シャトルバスやジンジルバンの予約申し込みに必要な銀行口座への振込ですが、どちらも同じ口座情報でした。&lt;/p&gt;

&lt;p&gt;韓国への送金方法は以下のサイトが参考になります。&lt;br /&gt;
&lt;a href=&quot;http://www.konest.com/contents/korean_life_detail.html?id=2429&quot;&gt;日本から韓国への送金&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;いくつか方法がありますが、私は丸の内にあるハナ銀行東京支店で手続きをしました。&lt;/p&gt;

&lt;p&gt;9時-15時 で営業しているのですが、ウォン建ての振り込みはレートが確定する11時以降になります。
私は11時まで待てなかったので円建てで送金しました。レートが分からないので念の為少し多めに。&lt;/p&gt;

&lt;p&gt;必要なものは、&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;身分証明証&lt;/li&gt;
  &lt;li&gt;印鑑&lt;/li&gt;
  &lt;li&gt;振込手数料 1,500円 + 10,000ウォン&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;です。&lt;/p&gt;

&lt;p&gt;振込先(Accounting holder) がハングルでかかれてますが、アルファベットで書く必要があります。
アルファベット表記は “SUNGJIN CNT” になります。&lt;/p&gt;

&lt;h2 id=&quot;日本のアーティスト情報&quot;&gt;日本のアーティスト情報&lt;/h2&gt;

&lt;p&gt;日本のアーティストも多数参加されます。同じ日本人として応援しましょう。&lt;/p&gt;

&lt;p&gt;(詳細はあとで書く)&lt;/p&gt;

&lt;h2 id=&quot;その他の手配&quot;&gt;その他の手配&lt;/h2&gt;
&lt;h3 id=&quot;モバイル環境&quot;&gt;モバイル環境&lt;/h3&gt;
&lt;h4 id=&quot;インターネット環境&quot;&gt;インターネット環境&lt;/h4&gt;
&lt;p&gt;iPhone がなれば海外旅行できないくらい非常に便利で依存してしまっているわけですが、ネットに繋がってなければほとんど意味がありません。
&lt;a href=&quot;http://mb.softbank.jp/mb/iphone/service/international/roaming/packet/&quot;&gt;海外パケットし放題&lt;/a&gt;のお陰で一日2,980円さえ払えばそれ以上料金気にすることなく利用できるようにはなったのですが、
数日となるとかなり高くついてしまいます。&lt;/p&gt;

&lt;p&gt;そこでオススメなのが、海外用モバイルデータ通信です。&lt;/p&gt;

&lt;p&gt;&lt;img class=&quot;center&quot; src=&quot;http://f.cl.ly/items/222H3h1G1T1d0f272A0g/mifi.jpg&quot; width=&quot;199&quot; height=&quot;149&quot; alt=&quot;MiFi&quot; /&gt;&lt;/p&gt;

&lt;p&gt;いろいろ業者はあるようですが、私は&lt;a href=&quot;http://www.globaldata.jp/&quot;&gt;グローバルデータ&lt;/a&gt;を良く使ってます。&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.globaldata.jp/plans/&quot;&gt;韓国なら一日680円&lt;/a&gt;で海外パケットし放題と比べてもとってもお得です。
複数名で共有するならなおさらで、さらにPC等でも利用できるので海外旅行ではマストなアイテムです。&lt;/p&gt;

&lt;h4 id=&quot;skype-out-の活用&quot;&gt;Skype Out の活用&lt;/h4&gt;

&lt;p&gt;国際電話も非常にお高いイメージですが &lt;a href=&quot;http://www.skype.com/&quot;&gt;Skype&lt;/a&gt; を活用することでグッと節約(&lt;a href=&quot;http://www.skype.com/intl/ja/prices/payg-rates?currency=JPY&quot;&gt;1分約3円&lt;/a&gt;)できます。&lt;/p&gt;

&lt;h4 id=&quot;モバイルバッテリー&quot;&gt;モバイルバッテリー&lt;/h4&gt;

&lt;p&gt;iPhone を8回も充電できるらしい ルックイーストの大容量モバイルバッテリー&lt;a href=&quot;http://www.lookeast.co.jp/products/power_pond.html&quot;&gt;POWER-POND&lt;/a&gt; を&lt;a href=&quot;http://www.amazon.co.jp/gp/product/B0071SYNAM?ie=UTF8&amp;amp;camp=1207&amp;amp;creative=8411&amp;amp;creativeASIN=B0071SYNAM&amp;amp;linkCode=shr&amp;amp;tag=migrs-22&amp;amp;redirect=true&quot;&gt;購入&lt;/a&gt;しました。
&lt;img class=&quot;center&quot; src=&quot;http://f.cl.ly/items/0h2w1F2J2C3Y0U401k1P/power-pond.jpg&quot; width=&quot;200&quot; height=&quot;200&quot; alt=&quot;POWER POND&quot; /&gt;
買ったばかりなので、実力の程は不明。実力が本当ならサバイバル環境でも安心ですね！&lt;/p&gt;

&lt;h2 id=&quot;情報交換しましょう&quot;&gt;情報交換しましょう！&lt;/h2&gt;

&lt;p&gt;私もこれから諸々の手配を始めるところなので、まだまだ間に合うはずです。&lt;/p&gt;

&lt;p&gt;ただ未確認情報も多いので書いてること鵜呑みにせず御自身の責任で行動してください。&lt;/p&gt;

&lt;p&gt;まだまだ不明な点もたくさんありますが、情報お持ちの方や私も行ってみたいという方はお気軽にご連絡ください！&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://facebook.com/migrs&quot;&gt;http://facebook.com/migrs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://twitter.com/migrs&quot;&gt;http://twitter.com/migrs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;と長々書きましたが本当に行けるのかしら・・・&lt;/p&gt;

&lt;p&gt;※このページは開催までの間、次第随時更新予定です。&lt;/p&gt;
</description>
        <pubDate>Sat, 07 Jul 2012 05:45:00 +0900</pubDate>
        <link>https://m.igrs.jp//blog/2012/07/07/jisan-valley-rock-festival-2012/</link>
        <guid isPermaLink="true">https://m.igrs.jp//blog/2012/07/07/jisan-valley-rock-festival-2012/</guid>
        
        
        <category>festival</category>
        
        <category>korea</category>
        
        <category>oversea</category>
        
      </item>
    
      <item>
        <title>Rubyist が今すぐ Elixir を使ってみるべき理由</title>
        <description>&lt;p&gt;&lt;img class=&quot;center&quot; src=&quot;https://i.imgur.com/UXvaUbF.png&quot; width=&quot;227&quot; height=&quot;95&quot; alt=&quot;elixir&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Elixir の読み方は多分「エリクサー」。RPGゲームのアイテムにありそうな名前だ。
個人的には「エリクシール」と読みたいところだが多分「エリクサー」で良いだろう。
Elixir は最近になって開発が活発化しており、公式サイトも最近立ち上げられたようだ。&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://elixir-lang.org/&quot;&gt;http://elixir-lang.org/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;つい先週のことだが Github でも公式にサポートされている。&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;Elixir is officially supported on Github! Including file identification and syntax highlight: &lt;a href=&quot;https://t.co/YaKXApRH&quot; title=&quot;https://github.com/languages/Elixir&quot;&gt;github.com/languages/Elix…&lt;/a&gt;&lt;/p&gt;&amp;mdash; Elixir Lang (@elixirlang) &lt;a href=&quot;https://twitter.com/elixirlang/status/176735692938936321&quot; data-datetime=&quot;2012-03-05T18:27:27+00:00&quot;&gt;March 5, 2012&lt;/a&gt;&lt;/blockquote&gt;
&lt;script src=&quot;//platform.twitter.com/widgets.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;p&gt;ここにきて盛り上がってきた感があるので、作者である &lt;a href=&quot;http://twitter.com/josevalim&quot;&gt;José Valim&lt;/a&gt; が約1年前に書いた &lt;a href=&quot;http://blog.plataformatec.com.br/2011/03/why-rubyists-should-try-elixir/&quot;&gt;Why Rubyists should try Elixir&lt;/a&gt; という記事を訳してみた。&lt;/p&gt;

&lt;p&gt;英語・日本語問わず語学苦手なので読み難い代物になってしまっているが間違いがあったら指摘して欲しい。&lt;/p&gt;

&lt;h4 id=&quot;追記2012-03-13&quot;&gt;追記(2012-03-13)：&lt;/h4&gt;
&lt;p&gt;昨日 Elixir 勉強会(Shinjuku.ex #1)で初めて &lt;a href=&quot;http://elixir-lang.org/getting_started/1.html&quot;&gt;Getting Started Guide&lt;/a&gt; を読んだのだが、今の Elixir は訳した記事が書かれた当時とはかなりシンタックスが変更されているようだ。 
なので記事中のコードを最新(0.4.0.dev)に合わせて書き直した。&lt;/p&gt;

&lt;!-- more --&gt;

&lt;p&gt;変更されていた点を列挙すると、&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;コメントアウトは &lt;code class=&quot;highlighter-rouge&quot;&gt;%&lt;/code&gt; でなく &lt;code class=&quot;highlighter-rouge&quot;&gt;#&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;アトムは ` (シングルクォート)ではなく : (セミコロン)&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;module&lt;/code&gt; -&amp;gt; &lt;code class=&quot;highlighter-rouge&quot;&gt;defmodule&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;if&lt;/code&gt; や &lt;code class=&quot;highlighter-rouge&quot;&gt;defmodule&lt;/code&gt; には &lt;code class=&quot;highlighter-rouge&quot;&gt;do&lt;/code&gt; が必要&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;else&lt;/code&gt; -&amp;gt; &lt;code class=&quot;highlighter-rouge&quot;&gt;else:&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/migrs/m.igrs.jp/commit/0747d7c8cf7cbf867d1654e42f6c6a1bd296308&quot;&gt;Diff はこちら&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;少し突っ込んでみて分かったこととして Erlang と Ruby だけではなく Clojure っぽさを強く感じる言語であるということ。&lt;/p&gt;

&lt;p&gt;勉強会については &lt;a href=&quot;http://twitter.com/mizchi&quot;&gt;@mizchi&lt;/a&gt; 氏のレポートがあるよ&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://d.hatena.ne.jp/mizchi/20120312/1331566107&quot;&gt;Elixir勉強会いってきました ~~ ErlangとRubyの中間、Elixir&lt;/a&gt;&lt;/p&gt;

&lt;hr /&gt;
&lt;h2 id=&quot;rubyist-が今すぐ-elixir-を使ってみるべき理由-why-rubyists-should-try-elixir&quot;&gt;Rubyist が今すぐ Elixir を使ってみるべき理由 (Why Rubyists should try Elixir)&lt;/h2&gt;

&lt;p&gt;今月(※2011年3月25日現在)の初めに、私は &lt;a href=&quot;http://github.com/elixir-lang/elixir&quot;&gt;Elixir&lt;/a&gt; についての&lt;a href=&quot;http://blog.plataformatec.com.br/2011/03/screencast-elixir-simple-object-orientation-and-charming-syntax-on-top-of-erlang/&quot;&gt;スクリーンキャストを公開&lt;/a&gt;している。
 それを見てない人向けに説明すると、Elixir は &lt;strong&gt;Erlangの上にシンプルなオブジェクト指向と魅力的な構文&lt;/strong&gt;を提供することを目指している。&lt;/p&gt;

&lt;p&gt;私の強いRuby背景に基づいて、私は何度か質問された結果、なぜ Rubyists は Elixir を使ってみるべきかについてのブログ記事を書くことにした。&lt;/p&gt;

&lt;p&gt;Elixir が持つ Ruby から来た &lt;em&gt;method missing&lt;/em&gt; や &lt;em&gt;module eval&lt;/em&gt; のような多くの構文やいくつかの機能によって同じようにメタプログラミングをすることができる。&lt;/p&gt;

&lt;p&gt;しかしながら Elixir は他の何よりも Erlang に間違いなく近い。
単一代入変数、不変性、簡単なプロセス間通信、リスト、タプル、バイナリ、そしてOTPの振舞は、すべて Elixir で利用できる。
したがって Elixir を使うことを通じて多くを学ぶことができるだろう。&lt;/p&gt;

&lt;p&gt;多くを学ぶ中で私が楽しく感じたのは次のとおりだ：&lt;/p&gt;

&lt;h3 id=&quot;パターンマッチング-pattern-matching&quot;&gt;パターンマッチング (Pattern matching)&lt;/h3&gt;

&lt;p&gt;私にとってパターンマッチングは関数型プログラミングの中で最も楽しい機能の一つだ。
これらによって簡単にデータ構造から情報を抽出することができるようになる。&lt;/p&gt;

&lt;p&gt;例えば、Elixir では次のように記述する：&lt;/p&gt;

&lt;div class=&quot;language-elixir highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;first&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;second&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;first&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# =&amp;gt; 1&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;second&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# =&amp;gt; 2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Ruby の代入演算子を使用して全く同じように書くことができるが、パターンマッチングの利点はメソッドのシグネチャの中で利用できることで、もしメソッドのシグネチャがある特定のパターンに一致しない場合は次のメソッドが試される。&lt;/p&gt;

&lt;p&gt;例えば、文字列のリストを反復処理しそれらを出力する方法は次のとおりだ：&lt;/p&gt;

&lt;div class=&quot;language-elixir highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;defmodule&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;Printer&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;# これは少なくとも一つの要素が存在するリストにマッチするパターンだ&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;# 最初の要素が head に割り当てられ、残りは tail に割り当てられる&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;([&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;head&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;tail&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;])&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt;
    &lt;span class=&quot;no&quot;&gt;IO&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;puts&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;head&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;tail&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# 再帰的に tail と引数として print が呼び出される&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;

  &lt;span class=&quot;c1&quot;&gt;# リストが空になったとき上のメソッドではマッチぜず、かわりにこれがマッチする&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;([])&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;# 何もしない。すべての出力は完了している。&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;

&lt;span class=&quot;no&quot;&gt;Printer&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;print&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;foo&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;bar&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;baz&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;また別のクールな例はリストが別のリストの接頭辞であるかどうかを確認する再帰的なメソッドだ：&lt;/p&gt;

&lt;div class=&quot;language-elixir highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;defmodule&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;Prefix&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;# 両方のリストを反復する。もし最初の要素が等しかったら自分自身を再び呼び出す。&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;# もし最初の要素(i)が等しくなかったら、このメソッドにはマッチしない。&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;is?&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;([&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;prefix&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;list&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;])&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;is?&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;prefix&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;list&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;

  &lt;span class=&quot;c1&quot;&gt;# もし接頭辞が空だったらこのメソッドにマッチし true を返す。&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;is?&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;([],&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_list&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;true&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;

  &lt;span class=&quot;c1&quot;&gt;# それ意外なら、false を返す。&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;is?&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;_prefix&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_list&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;false&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;

&lt;span class=&quot;no&quot;&gt;Prefix&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;is?&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;([&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;])&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# =&amp;gt; true&lt;/span&gt;
&lt;span class=&quot;no&quot;&gt;Prefix&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;is?&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;([&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;])&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# =&amp;gt; false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;最後に、パターンマッチングは Ruby 2.0 で計画されている機能の一つであるキーワード引数を可能にする。
この例は Elixir のコードそのものだ&lt;del&gt;（Elixir のシンボルはコロンではなくシングルクォートでることに注意）&lt;/del&gt;：&lt;/p&gt;

&lt;div class=&quot;language-elixir highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;defmodule&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;Record&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;retrieve&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;from:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;file&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;# ここに実装を書く ...&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Elixir と Erlang のどちらも &lt;strong&gt;while&lt;/strong&gt; のような条件ループを提供しないという事実は、あなたに異なる考え方やパターンマッチングの利用を強いることになる。&lt;/p&gt;

&lt;p&gt;まずは Ruby で解決して、次に全く別の解決策を考え出すというように、問題について別視点で考えるということは一般的に非常に洞察的で楽しい過程だ。&lt;/p&gt;

&lt;p&gt;また、注意として Elixir と Erlang の両方において末尾再帰最適化するので、もし Ruby で似たようなメソッドを実装するなら、巨大なスタックトレースを取得することができる場合のみ上手く動作する。&lt;/p&gt;

&lt;h3 id=&quot;単一代入変数と不変性-single-assignment-variables-and-immutability&quot;&gt;単一代入変数と不変性 (Single assignment variables and immutability)&lt;/h3&gt;

&lt;p&gt;上記例において Erlang の変数は単一代入であることをまだ見せてなかった。
これにより次のエラーが発生する：&lt;/p&gt;

&lt;div class=&quot;language-elixir highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;first&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;second&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;first&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;これは bad match error を投げる。
なぜなら既に &lt;code class=&quot;highlighter-rouge&quot;&gt;first&lt;/code&gt; に値が割り当てられており、2行目の &lt;code class=&quot;highlighter-rouge&quot;&gt;first = 10&lt;/code&gt; は &lt;code class=&quot;highlighter-rouge&quot;&gt;1&lt;/code&gt; と &lt;code class=&quot;highlighter-rouge&quot;&gt;10&lt;/code&gt; を比較しているので当然ここで失敗するのだ。&lt;/p&gt;

&lt;p&gt;変数は一度だけ割り当てられるということは、前述の prefix method のような実装が可能となり、両方のリストでマッチして &lt;code class=&quot;highlighter-rouge&quot;&gt;i&lt;/code&gt; に値が割り当てられる。&lt;/p&gt;

&lt;p&gt;また、Elixir と Erlang の両方において、オブジェクト/データ構造はその場で変更することはできない。
こらは不変だ。
すべての変更は新しいオブジェクト/データ構造体を生成する。&lt;/p&gt;

&lt;p&gt;不変性は言語内部の共有状態を排除し（外部操作を実行する必要がある場合あなたはまだ状態を共有している）、Erlang と Elixir の並行性に重要な役割を果たしている。&lt;/p&gt;

&lt;p&gt;個人的に、不変性は同時に幸福と不幸もたらすことが分かった。
Railsアプリケーションで作業するとき可変性は一般的に問題ではないが、Rails 自体や gem 等の実装においては頻繁に可変性について考える必要がある。変更するメソッドにオブジェクト（ハッシュや配列のような）を渡したときに、そのオブジェクトの中の新しい要素が結局どうなったのかを追跡するために時間を費やさなければならない。&lt;/p&gt;

&lt;p&gt;Elixir で作業する際にすべてが不変であるので、このような場合を心配する必要はない、そう、それが気持ちいいのだ！
これは C から Java に行くような感覚で、私は突然メモリ管理を心配する必要もない。&lt;/p&gt;

&lt;p&gt;しかし、このような利点はいくつかのコードをより冗長にさせるという明らかな欠点をもたらす。&lt;/p&gt;

&lt;p&gt;この欠点を示すために、Rails ライクな PostsController の create アクションを、不変性と単一代入変数の両方を考慮して書き直してみる：&lt;/p&gt;

&lt;div class=&quot;language-elixir highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;create&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;post0&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;Post&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;params&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;ss&quot;&gt;:post&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;])&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;post1&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;post0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;ss&quot;&gt;:published&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;post2&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;post1&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;save&lt;/span&gt;

  &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;post2&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;persisted?&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;redirect_to&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;post2&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;render&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:new&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;この場合 ORM はよりよい API を提供することができそうだが、これは何度も繰り返されるパターンだ。
たとえば、クッキーを変更するとレスポンスオブジェクトに明示的な変更が必要になる。&lt;/p&gt;

&lt;div class=&quot;language-elixir highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;response1&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;response&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cookies&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;tracker_code&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;123456&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;いずれにせよ、不変性と単一代入変数を提供する言語での作業は経験する価値がある。
私が今までのブログ記事で言及したことを試してみることによって多くを学ぶことができるだろう。&lt;/p&gt;

&lt;p&gt;追記：
いくつかのコメントで指摘したように、Elixir は単一代入を削除することができて、その上で Erlang の基盤と正常にやりとりすることができる。
このような理由から、Elixir は今では複数回同じ変数に割り当てることができるし、Erlang と比較すると変数のスコープ（Ruby に似ている）に関連したより柔軟なルールがある。&lt;/p&gt;

&lt;h3 id=&quot;プロセス間通信-communication-between-processes&quot;&gt;プロセス間通信 (Communication between processes)&lt;/h3&gt;

&lt;p&gt;パターンマッチング、単一代入変数と不変性は、プロセス間の通信のための良い基盤を提供する。
もしこれらの動作に興味があるなら&lt;a href=&quot;http://blog.plataformatec.com.br/2011/03/screencast-elixir-simple-object-orientation-and-charming-syntax-on-top-of-erlang/&quot;&gt;このスクリーンキャスト&lt;/a&gt;を見ると良い。&lt;/p&gt;

&lt;h3 id=&quot;異なるオブジェクトモデル-a-different-object-model&quot;&gt;異なるオブジェクトモデル (A different Object Model)&lt;/h3&gt;

&lt;p&gt;Elixir は Ruby とは異なるオブジェクトモデルを持っている。
オブジェクトモデルはクラスが無いという意味では JavaScript のようなプロトタイプベースだが、JavaScript や Self のそれとは違い
オブジェクトはその子供達がどのようになるかを指示することができ、必ずしも親から正確にコピーされない。&lt;/p&gt;

&lt;p&gt;これについてのより多くの情報は &lt;a href=&quot;http://github.com/elixir-lang/elixir&quot;&gt;Elixir の README&lt;/a&gt; にある。そこには、本当の private メソッド（多分それは Ruby 2.0 に含まれるかも？）やローカルメソッド呼び出しのようないくつかの他のクールな機能の情報も含まれる。&lt;/p&gt;

&lt;p&gt;常に他のオブジェクトモデルを使用することによって多くを学ぶことができ、このチップは Elixir だけに制限されるものではない。
あなたがもし JavaScript のオブジェクトモデルまたは他のプロトタイプベースの言語に精通していないのであれば、今それを学ぶことを勧める。&lt;/p&gt;

&lt;h3 id=&quot;学ぶ-just-learn&quot;&gt;学ぶ (Just learn)&lt;/h3&gt;

&lt;p&gt;スクリーンキャストやREADMEで述べたように、標準ライブラリとテストの両方が Elixir 自体で書かれているので Elixir に貢献するのはとても簡単だ。
さて、Elixir で &lt;a href=&quot;http://ruby-doc.org/stdlib/libdoc/set/rdoc/index.html&quot;&gt;Ruby のセット&lt;/a&gt;のような何かを実装しなければならないことを想像してみよう。&lt;/p&gt;

&lt;p&gt;Ruby のセットについてさらに深く学ぶだけでなく、使用するための最良の構造はどうあるべきか、どのアルゴリズムがセットを更新するのに適しているか、それらのオブジェクトにアクセスするための優れた API はどうあるべきか、について学ぶ必要がある。&lt;/p&gt;

&lt;p&gt;また、パッケージングシステム、ドキュメントパーサーやテスト·ライブラリのようにどの言語でも必要な基本的なツールだけど現在 Elixir で欠如しているこれらはあなたが実装する1つかもしれない！&lt;/p&gt;

&lt;h3 id=&quot;結論-wrapping-up&quot;&gt;結論 (Wrapping up)&lt;/h3&gt;

&lt;p&gt;私はあなたが Elixir を試してみること期待するし確信している。この言語に関してもっと知りたければ &lt;a href=&quot;http://github.com/elixir-lang/elixir&quot;&gt;README&lt;/a&gt; をチェックして欲しい。&lt;/p&gt;

&lt;p&gt;最後に、クレイジーなことをするために別のインスピレーションが必要なのであれば &lt;a href=&quot;http://pragdave.blogs.pragprog.com/pragdave/2008/12/forking-rubymy-rubyconf-keynote-is-now-up.html&quot;&gt;Forking Ruby talk by Dave Thomas&lt;/a&gt; を勧める。&lt;/p&gt;

&lt;p&gt;彼が言ったように、私たちは Ruby を愛し、そこからいますぐ離れるようなことは無いが、それを分岐したり新しい物事をしようとすることは言語とそのエコシステムを改善するための素晴らしい方法であり、Elixir がそのことについてさらに考える手助けになることを期待している。&lt;/p&gt;
</description>
        <pubDate>Mon, 12 Mar 2012 00:33:00 +0900</pubDate>
        <link>https://m.igrs.jp//blog/2012/03/12/why-rubyists-should-try-elixir/</link>
        <guid isPermaLink="true">https://m.igrs.jp//blog/2012/03/12/why-rubyists-should-try-elixir/</guid>
        
        
        <category>elixir</category>
        
        <category>ruby</category>
        
        <category>translate</category>
        
      </item>
    
      <item>
        <title>Pow をもっと便利に使うためのツール比較 - Powder / Powify Comparison</title>
        <description>&lt;p&gt;Mac and Ruby なウェブ開発者必携、&lt;a href=&quot;http://37signals.com/&quot;&gt;37signals&lt;/a&gt; 謹製の非常に便利な &lt;a href=&quot;http://pow.cx&quot;&gt;Pow&lt;/a&gt; ですがみなさん活用してますか？&lt;/p&gt;

&lt;p&gt;&lt;img class=&quot;center&quot; src=&quot;http://pow.cx/images/logo-pow.png&quot; width=&quot;410&quot; height=&quot;300&quot; alt=&quot;pow&quot; /&gt;&lt;/p&gt;

&lt;p&gt;私はいわゆるプログラマーと呼ばれる人だけではなく、ウェブデザイナーな人たちにこそ活用して欲しいプロダクトだと思っているのですがそのことについては置いておいて（また別途）
ここでは周辺ツールについて。&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;Pow 自体非常にシンプルでサードパーティツールの類はほとんど必要ないのですが、
さらに便利に扱うためのツールが&lt;a href=&quot;http://pow.cx/manual.html&quot;&gt;マニュアル&lt;/a&gt;でいくつか&lt;a href=&quot;http://pow.cx/manual.html#section_4&quot;&gt;紹介&lt;/a&gt;されています。&lt;/p&gt;

&lt;p&gt;ここにある二つのプロダクト
(&lt;a href=&quot;https://github.com/Rodreegez/powder&quot;&gt;Powder&lt;/a&gt;/&lt;a href=&quot;https://github.com/sethvargo/powify&quot;&gt;Powify&lt;/a&gt;)
が非常にクリソツ（死語）で何が違うのか一目では分からなかったので（自分の為にも）表にして比較してみた。&lt;/p&gt;

&lt;p&gt;結論から言うと両者ほとんど同じ。Powify の方が若干高機能かな〜ってくらい。&lt;/p&gt;

&lt;h2 id=&quot;powder--powify-comparison&quot;&gt;Powder / Powify Comparison&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th width=&quot;45%&quot; style=&quot;text-align:center;&quot;&gt;&lt;a href=&quot;https://github.com/Rodreegez/powder&quot;&gt;Powder&lt;/a&gt;&lt;/th&gt;
      &lt;th width=&quot;55%&quot; style=&quot;text-align:center;&quot;&gt;&lt;a href=&quot;https://github.com/sethvargo/powify&quot;&gt;Powify&lt;/a&gt;&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody style=&quot;font-size:medium;&quot;&gt;
    &lt;tr&gt;
      &lt;th colspan=&quot;2&quot;&gt;&lt;strong style=&quot;font-size:x-large;&quot;&gt;Server Commands&lt;/strong&gt;&lt;/th&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td colspan=&quot;2&quot; style=&quot;color:#AAA;&quot;&gt;Install pow server ( &lt;small&gt;&lt;code&gt;curl get.pow.cx | sh&lt;/code&gt;&lt;/small&gt; )&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;padding:0 0 10px 20px;&quot;&gt;&lt;code&gt;powder install&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;padding:0 0 10px 20px;&quot;&gt;&lt;code&gt;powify server install&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td colspan=&quot;2&quot; style=&quot;color:#AAA;&quot;&gt;Reinstall pow server&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;padding:0 0 10px 20px;&quot;&gt;&lt;code&gt;-&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;padding:0 0 10px 20px;&quot;&gt;&lt;code&gt;powify server reinstall&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td colspan=&quot;2&quot; style=&quot;color:#AAA;&quot;&gt;Update pow server&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;padding:0 0 10px 20px;&quot;&gt;&lt;code&gt;-&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;padding:0 0 10px 20px;&quot;&gt;&lt;code&gt;powify server update&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td colspan=&quot;2&quot; style=&quot;color:#AAA;&quot;&gt;Uninstall pow server ( &lt;small&gt;&lt;code&gt;curl get.pow.cx/uninstall.sh | sh&lt;/code&gt;&lt;/small&gt; )&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;padding:0 0 10px 20px;&quot;&gt;&lt;code&gt;powder uninstall&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;padding:0 0 10px 20px;&quot;&gt;&lt;code&gt;powify server uninstall&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td colspan=&quot;2&quot; style=&quot;color:#AAA;&quot;&gt;List all pow apps ( &lt;small&gt;&lt;code&gt;ls -l ~/.pow/&lt;/code&gt;&lt;/small&gt; )&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;padding:0 0 10px 20px;&quot;&gt;&lt;code&gt;powder list&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;padding:0 0 10px 20px;&quot;&gt;&lt;code&gt;powify server list&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td colspan=&quot;2&quot; style=&quot;color:#AAA;&quot;&gt;Start the pow server ( &lt;small&gt;&lt;code&gt;launchctl load ~/Library/LaunchAgents/cx.pow.powd.plist&lt;/code&gt;&lt;/small&gt; )&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;padding:0 0 10px 20px;&quot;&gt;&lt;code&gt;powder up&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;padding:0 0 10px 20px;&quot;&gt;&lt;code&gt;powify server start&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td colspan=&quot;2&quot; style=&quot;color:#AAA;&quot;&gt;Stop the pow server ( &lt;small&gt;&lt;code&gt;launchctl unload ~/Library/LaunchAgents/cx.pow.powd.plist&lt;/code&gt;&lt;/small&gt; )&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;padding:0 0 10px 20px;&quot;&gt;&lt;code&gt;powder down&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;padding:0 0 10px 20px;&quot;&gt;&lt;code&gt;powify server stop&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td colspan=&quot;2&quot; style=&quot;color:#AAA;&quot;&gt;Restart the pow server&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;padding:0 0 10px 20px;&quot;&gt;-&lt;/td&gt;
      &lt;td style=&quot;padding:0 0 10px 20px;&quot;&gt;&lt;code&gt;powify server restart&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td colspan=&quot;2&quot; style=&quot;color:#AAA;&quot;&gt;Updates hosts file to map pow domains to 127.0.0.1&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;padding:0 0 10px 20px;&quot;&gt;&lt;code&gt;powder host&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;padding:0 0 10px 20px;&quot;&gt;&lt;code&gt;powify server host&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td colspan=&quot;2&quot; style=&quot;color:#AAA;&quot;&gt;Removes pow domains from hostfile&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;padding:0 0 10px 20px;&quot;&gt;&lt;code&gt;powder unhost&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;padding:0 0 10px 20px;&quot;&gt;&lt;code&gt;powify server unhost&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td colspan=&quot;2&quot; style=&quot;color:#AAA;&quot;&gt;Shows current pow status&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;padding:0 0 10px 20px;&quot;&gt;&lt;code&gt;powder status&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;padding:0 0 10px 20px;&quot;&gt;&lt;code&gt;powify server status&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td colspan=&quot;2&quot; style=&quot;color:#AAA;&quot;&gt;Shows current pow configuration&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;padding:0 0 10px 20px;&quot;&gt;&lt;code&gt;powder config&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;padding:0 0 10px 20px;&quot;&gt;&lt;code&gt;powify server config&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td colspan=&quot;2&quot; style=&quot;color:#AAA;&quot;&gt;Tails the Pow log ( &lt;small&gt;&lt;code&gt;tail -f ~/Library/Logs/Pow/access.log&lt;/code&gt;&lt;/small&gt; )&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;padding:0 0 10px 20px;&quot;&gt;&lt;code&gt;-&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;padding:0 0 10px 20px;&quot;&gt;&lt;code&gt;powify server logs&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;th colspan=&quot;2&quot;&gt;&lt;strong style=&quot;font-size:x-large;&quot;&gt;App Commands&lt;/strong&gt;&lt;/th&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td colspan=&quot;2&quot; style=&quot;color:#AAA;&quot;&gt;Create a pow app from the current directory ( &lt;small&gt;&lt;code&gt;ln -s `pwd` ~/.pow/[NAME]&lt;/code&gt;&lt;/small&gt; )&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;padding:0 0 10px 20px;&quot;&gt;&lt;code&gt;powder link [NAME]&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;padding:0 0 10px 20px;&quot;&gt;&lt;code&gt;powify create [NAME]&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td colspan=&quot;2&quot; style=&quot;color:#AAA;&quot;&gt;Destroy the pow app served from the current directory ( &lt;small&gt;&lt;code&gt;rm ~/.pow/[name]&lt;/code&gt;&lt;/small&gt;)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;padding:0 0 10px 20px;&quot;&gt;&lt;code&gt;powder unlink [NAME]&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;padding:0 0 10px 20px;&quot;&gt;&lt;code&gt;powify destroy [NAME]&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td colspan=&quot;2&quot; style=&quot;color:#AAA;&quot;&gt;Clean up invalid symbolic link&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;padding:0 0 10px 20px;&quot;&gt;&lt;code&gt;powder cleanup&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;padding:0 0 10px 20px;&quot;&gt;&lt;code&gt;-&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td colspan=&quot;2&quot; style=&quot;color:#AAA;&quot;&gt;Restart pow app ( &lt;small&gt;&lt;code&gt;touch tmp/restart.txt&lt;/code&gt;&lt;/small&gt;)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;padding:0 0 10px 20px;&quot;&gt;&lt;code&gt;powder restart&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;padding:0 0 10px 20px;&quot;&gt;&lt;code&gt;powify restart [NAME]&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td colspan=&quot;2&quot; style=&quot;color:#AAA;&quot;&gt;Always restart pow app ( &lt;small&gt;&lt;code&gt;touch tmp/always_restart.txt&lt;/code&gt;&lt;/small&gt;)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;padding:0 0 10px 20px;&quot;&gt;&lt;code&gt;powder always_restart&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;padding:0 0 10px 20px;&quot;&gt;&lt;code&gt;powify always_restart [NAME]&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td colspan=&quot;2&quot; style=&quot;color:#AAA;&quot;&gt;Reset restart settings ( &lt;small&gt;&lt;code&gt;rm tmp/always_restart.txt&lt;/code&gt;&lt;/small&gt;)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;padding:0 0 10px 20px;&quot;&gt;&lt;code&gt;powder no_restarts&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;padding:0 0 10px 20px;&quot;&gt;&lt;code&gt;powify always_restart_off [NAME]&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td colspan=&quot;2&quot; style=&quot;color:#AAA;&quot;&gt;Rename the pow app to [NAME]&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;padding:0 0 10px 20px;&quot;&gt;&lt;code&gt;-&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;padding:0 0 10px 20px;&quot;&gt;&lt;code&gt;powify rename [NAME]&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td colspan=&quot;2&quot; style=&quot;color:#AAA;&quot;&gt;Run the this pow app in a different environment&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;padding:0 0 10px 20px;&quot;&gt;&lt;code&gt;-&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;padding:0 0 10px 20px;&quot;&gt;&lt;code&gt;powify env [ENV]&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td colspan=&quot;2&quot; style=&quot;color:#AAA;&quot;&gt;Open a pow in the browser&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;padding:0 0 10px 20px;&quot;&gt;&lt;code&gt;powder open&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;padding:0 0 10px 20px;&quot;&gt;&lt;code&gt;powify browse [NAME]&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td colspan=&quot;2&quot; style=&quot;color:#AAA;&quot;&gt;Tail the application logs ( &lt;small&gt;&lt;code&gt;tail -f ~/Library/Logs/Pow/apps/[NAME].log&lt;/code&gt;&lt;/small&gt; )&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;padding:0 0 10px 20px;&quot;&gt;&lt;code&gt;powder log&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;padding:0 0 10px 20px;&quot;&gt;&lt;code&gt;powify logs [NAME]&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td colspan=&quot;2&quot; style=&quot;color:#AAA;&quot;&gt;Set this app as default (http://localhost/)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;padding:0 0 10px 20px;&quot;&gt;&lt;code&gt;powder default&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;padding:0 0 10px 20px;&quot;&gt;&lt;code&gt;-&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td colspan=&quot;2&quot; style=&quot;color:#AAA;&quot;&gt;Remove current default app&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;padding:0 0 10px 20px;&quot;&gt;&lt;code&gt;powder un_default&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;padding:0 0 10px 20px;&quot;&gt;&lt;code&gt;-&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;


  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Non-Japanese な人向けに &lt;a href=&quot;https://gist.github.com/1615032&quot;&gt;gist&lt;/a&gt; も用意した。&lt;/p&gt;

&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;Powify には専用の管理アプリ(&lt;a href=&quot;https://github.com/sethvargo/powify.dev&quot;&gt;powify.dev&lt;/a&gt;)も用意されており、以下のコマンドで設置可能。
(今のところPow情報表示するだけのシンプルなもの)&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code&gt;powify utils install&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;powify utils reinstall&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;powify utils uninstall&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;敢えて言うなら、シンプルな Powder・高機能な Powify といった感じか？&lt;br /&gt;
今のところ善し悪し微妙なので好き好きで！&lt;/p&gt;

&lt;h3 id=&quot;references&quot;&gt;References&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://d.hatena.ne.jp/marutanm/20110418/p1&quot;&gt;Rackアプリ開発するならPowはもう常識だよね～&lt;/a&gt; &lt;a href=&quot;http://b.hatena.ne.jp/entry/http://d.hatena.ne.jp/marutanm/20110418/p1&quot;&gt;&lt;img style=&quot;border:none;&quot; src=&quot;http://b.hatena.ne.jp/entry/image/http://d.hatena.ne.jp/marutanm/20110418/p1&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
        <pubDate>Mon, 16 Jan 2012 09:30:00 +0900</pubDate>
        <link>https://m.igrs.jp//blog/2012/01/16/powder-powify-comparison/</link>
        <guid isPermaLink="true">https://m.igrs.jp//blog/2012/01/16/powder-powify-comparison/</guid>
        
        
        <category>pow</category>
        
      </item>
    
  </channel>
</rss>
