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

kondoumh のブログ

- とあるソフトウェアエンジニアのめったに更新されないブログ -

Bash on Ubuntu on Windows 10 の可能性

PC Tools

Windows で Ubuntu のバイナリパッケージがネイティブに動作

Windows 10 Anniversary Update の目玉である Ubuntu On Windows。当初「Bash が使える」っていうニュースばかりでスルーしている人も多いと思いますが、Windows NT 系で昔から実装されている POSIX 互換 API を使って Linux のバイナリを動作させる技術です*1。ネイティブに Ubuntu のバイナリが実行できるので高速です(API 変換のオーバーヘッドはあるはずですが)。

VMware のように仮想マシンを起動する必要もなく、10年ぐらい前に流行った coLinux のように別途サービスを起動する必要もありません。Microsoft と Canonical がコラボして Windows に Ubuntu のフルセット機能を提供してくれるという大盤振る舞い。これが熟成してくると CygwinMinGW を使うシーンが減っていきそうです。

ディベロッパーが Mac から Windows マシンにスイッチする流れが

Ubuntu on Windows がカバーする領域は、

  • Linux ネイティブ技術での Web アプリ開発 (Rails とか Node.js とか Perl とか Python とか) をやりたい
  • Rust とか Julia のような LLVM の最新言語を使いたい
  • clang や GCC のツールチェインを使いたい
  • Hadoop とか Spark などの OSS の分散処理系の開発をしたい

などのユースケースです。これまでは Windows なら VMware や VirtualBox の仮想マシン使ってたところをほぼネイティブに近い使い勝手(起動の速さやフットプリントの小ささ)に置き換える技術ということができます。マシンの増強をしなくても良いのです*2。Web デベロッパーは MacBook Pro/Air で Homebrew / MacPorts のようなパッケージ管理システムで開発環境を整えるのが一般的でしたが、今後は Windows ラップトップも有力な選択肢になっていくでしょう。iOS / macOS アプリ開発者以外は積極的に Mac を選ぶ理由がなくなります。

WIndows で Ruby や MySQL など Unix 由来のテクノロジーを使う場合、これまでは個別にインストーラーをダウンロードしなければならず、Linux 版との挙動の違いや機能制限に悩まされました。今後はそのようなことで消耗する必要ははなくなるはずです。

開発環境が OS X(macOS) でプロダクション環境が Linux という場合、どうしても開発時には気づかない環境の差異が表面化することもありますが、開発時点から Linux 環境であればそのようなリスクも少ないでしょう。

導入の流れ

Windows 10 Anniversary Update を導入後*3、設定で開発者モードにした上で Windows Subsystem for Linux を有効化します*4。しかしリリースされたのにまだベータ版?

f:id:kondoumh:20160824004552p:plain

コマンドウィンドウにも「ベータ」の文字が。。

f:id:kondoumh:20160824005046p:plain

本体のインストールは数分で終わります。

f:id:kondoumh:20160824005056p:plain

f:id:kondoumh:20160824005105p:plain

Ubuntu パッケージのインストール

普通に sudo apt-get install でいけます。

Emacs 動きました。

f:id:kondoumh:20160824005120p:plain

f:id:kondoumh:20160824005140p:plain

Git の Text-mode interface である tig も動きました。

f:id:kondoumh:20160824060913p:plain

f:id:kondoumh:20160824060925p:plain

自分は使ってませんが Rails のインストールもいけるっぽいです。

qiita.com

動作イメージ

Ubuntu サブシステムを起動するスピードはコマンドプロンプトと変わらないし、CPU やメモリの負荷も低い感じです。

前述の coLinux は仮想マシンではありませんが、ホスト側の Windows と隔離されたプロセス空間を必要としました。

blog.kondoumh.com

この10年前のエントリでは、メモリ 512MB の ThinkPad X40 で100MBぐらい coLinux 側にメモリを配分するなど苦労しています。そういう苦労はもう過去のものです。

Ubuntu on Windows が coLinux と違うところは、Ubuntu 上のプロセスも Windows のプロセスとして認識されるところです。bash で Emacs を起動すると、タスクマネージャにも bash と emacs が表示されています。

f:id:kondoumh:20160824211323p:plain

こういうの見ると、Cygwin っぽい動作イメージに見えます*5。Cygwin との違いは Microsoft と Canonical が最適なランタイムを提供してくれるところとビルドで苦労しなくて良いところですね。

コマンドプロンプトと同じシェル環境で動くので、フォントが MSゴシックじゃないと日本語表示がちゃんとできません。あと日本語入力は効かないです。putty とかで ssh 接続すればいいのですが、OS X のターミナル感覚で使いたいのでなんとか改善してほしいところです*6

node.js / npm も一応インストールできました。Windows で Node.js を使ってると、プロジェクトフォルダ配下の node_modules のパスが深くなりすぎてパスの長さの条件を超えてしまって詰むということがありますが、Ubuntu on Windows では大丈夫なのかとか懸念はあります。

コマンドプロンプトや PowerShell はどうなる?

Bash on Ubuntu が Windows で普通に使えるようになると、CMD.exe とか PowerShell は今後どうなっていくでしょうか? Windows のネイティブ環境のシェルスクリプティングについては、PowerShell の利便性は圧倒的であり、Ubuntu on Windows は PowerShell を置き換える存在ではないと僕は考えます。

blog.kondoumh.com

CMD.exe にはそろそろ引退していただきたいですが。

*1:昔 SFU (Windows Service for Unix というサブシステムで Unix 互換環境が使用できました

*2:即座にそのような状況になるということではなく熟成が進めばの話ですが

*3:現時点で降ってこなければインストーラをダウンロードして手動アップデートも可能です。

*4:開発者モードを有効にしたら自動で使えるようにして欲しいですね

*5:実際ファイルシステム周りの性能はまだ Cygwin の方が有利という情報も目にしました

*6:ConEmu で使っている人もいるようです。Bash on Ubuntu on Windowsのいろいろ - Qiita

Emacs org-mode で GTD

Tools Job

Emacs の org-mode

Emacs にはタスク管理用のメジャーモード org-mode があり Emacs の パッケージシステムで簡単にインストールできます。

orgmode.org

org は organize (整理する) の意です。公式サイトによれば、

Org-mode は、ノートの保存、TODOリストの管理、プロジェクト計画のためのモードです。高速で効率的なプレーンテキストのシステムを使ってファイルを編集します。

とあります。プレーンテキストを扱うため、あらゆるテキストエディタで閲覧・編集が可能ですが、org-mode で操作することで、ノートやタスクをカラフルにオブジェクトとして扱うことができます。

拡張子が .org のファイルが org-mode 用のファイルとして認識されます。

強力なアウトラインプロセッサ機能

見出しと本文をインラインで自在に編集可能で、見出しの折り畳みと展開も Tab で簡単にトグルできるため、強力なアウトラインプロッセッサとして機能します。

f:id:kondoumh:20160715002851p:plain

末尾に ... が付いている見出しは折り畳まれています。上のイメージでは分かりにくいですが、見出しの階層と順序がエディタ内でキーボードだけで操作できるため、思考を妨げられることなく推敲に集中できます。

Wiki 的機能

Wiki や Blog では各プログラミング言語のシンタックスハイライトが使えるものが多いですよね。Org でもちゃんとサポートされています。 #+BEGIN_SRC <言語> 〜 #+END_SRC でマークアップすることで、サンプルコードを文書中に挿入できます。

file:xxx.png の記法で画像埋め込みも可能。

f:id:kondoumh:20160715003303p:plain

HTML , PDF, Markdown へのエクスポートもサポートされています。簡易な DTP として利用できます。

f:id:kondoumh:20160715003358p:plain

GTD 機能

TODO を見出しとしてサブタスクを箇条書きで階層的に管理して、サブタスクの完了/未完了状態をエディタ内でチェックボックスのような UI で管理できます。こんな感じ。

f:id:kondoumh:20160715002447p:plain

チェックボックスの状態は C-c C-c でトグルでき、サブタスクの消化率も連動して更新されます。サブタスクの追加/削除にも連動してくれます。

自分のミッションを TODO とサブタスクに分解して、一つ一つ潰していく感じです。

進捗はサブタスクの消化率と TODO のステータス(TODO/DOING/DONE) で把握できます。 GTD ツールとしては非常に高い水準にあると思います。

f:id:kondoumh:20160715003648p:plain

モバイル連携機能

Emacs はパソコンでしか使えないので、モバイルとの連携が気になるところですが、公式とサードパーティからアプリが出ています。

MobileOrg : What is MobileOrg?

公式は MobileOrg。Dropbox で連携するのですが、同期が面倒で変なタグがいっぱい埋め込まれてしまうという難点があります。

最近見つけたのが Orgzly。

www.orgzly.com

こちらは、シンクロが簡単で、変なタグ埋め込みもなく良い感じ。今のところ iOS には同等のアプリはないようです。

モバイルでもさくさく編集してシンクロ出来たらかっこいいのですが、閲覧に特化した使い方しかしてません。

Torrello といえば OrgMode から Torrello のタスクを操作できるというツールがあるそうです。

org-trello

最後に、僕の org-mode 設定を晒しておきましょう。

;; org-mode
(setq org-src-fontify-natively t)
(setq org-startup-truncated nil)
(setq org-return-follows-link t)
(setq org-todo-keywords '((type "TODO(t)" "DOING(i)" "|" "DONE(d)" "SOMEDAY(s)" "WON'T(w)")))

TODO の遷移定義ぐらいしかしてません。

f:id:kondoumh:20160714003748p:plain

今更ながら PowerShell に覚醒

Programming

最近仕事で PowerShell で色々とスクリプト書くことが増えてきました。

MS-DOS 時代からあるバッチファイルで頑張るのは厳しくなってるんですが、PowerShell は Windows 7 から標準装備(XP とか Vista にもあったのかも)。Unix のシェルと同様パイプが使えて、Unix 相当のコマンドは完備されており、しかもパイプにオブジェクトが渡せて Map / Filter を駆使して関数型プログラミングも可能。これまでちゃんと使おうと思わなかったのが不思議な感じです。

Windows 7 でも Update すれば PowerShell 4.0 が使えます。ISE (Windows PowerShell Integrated Scripting Environmentnt) でコード補完(IntelliSense)とフォント設定が効くようになるので可能な場合は Update しましょう。

Visual Studio でプロジェクト作るとファイル単位でのお手軽さが失われるし、デバッガも ISE の方がいい感じです。

Visual Studio のプロジェクトファイルを xpath 駆使して変換するための Tips を Qiita に投稿しました。

ファイルを列挙し、読み込んで処理するのは超簡単で XML も xpath とプロパティで簡単に操作できるので非常に生産性が高いです。.NET のクラスも使えるので C# で書いてコンパイルしてアセンブリ配置するとか不要。OS に統合されたスクリプト言語の強みですね。

こういう自動化にぴったりです。

プロダクトコードに疲れた時にシェルを書くのは癒しになります。

最終的に 300行ぐらいのツールになりました。

新しい現場では、Mattermost っていう Slack クローンを導入していて、Jenkins のビルド結果を通知する Bot とかがあるのですが、Excel ファイルを監視して通知してくれる Bot なども PowerShell で作成したりしています。

Mattermost

最近の PowerShell はコマンドヒストリをファイルに保存できたりします。キーバインドについてはサードパーティ製のツールに期待することになりそうですが、ps1 ファイルを ISE で実行するのが標準的な使い方なので、コマンドプロンプトを置き換える存在にはならないかもです。

ちなみに Windows 10 Anniversary Update では Ubuntu サブシステムが使えるようになり Bash などが普通に使えるようになりますが、これは、PowerShell を置き換えるものにはならないと思っています*1

PowerShell は Windows のファイルシステムとか .NET ライブラリとの親和性が高く、Windows での開発や自動化に適しています。Jenkins にも PowerShell プラグインが提供されており、ビルドプロセスに組み込みことも簡単です。

[追記]

PowerShell はプラットフォームとの親和性を活かして、IIS とか Azure の設定を自動化する Infrastructure as Code の基盤としての側面もあります。Chef などのツールに該当するものですね。実行環境の構築に有効活用していきたいところです。

www.powershellmagazine.com

f:id:kondoumh:20160410125254j:plain

*1:Windows で Node とか Rails 開発したい人向けのソリューションだと考えてます

iPad Air と Magic Keyboard JP の組み合わせは最強 2in1 です(断言)。

iOS Keyboard Gadget Android

指先が痛くなる

昨年末に購入した Magic Keyboard.

blog.kondoumh.com

半年ほど自宅でメインに使っていたのですが、最近なんていうか指先が痛いです。普通のキーボード叩く感覚で入力してると、ストロークが浅いので跳ね返りがきついのかなと。ピッチは広くて Mac に最適化されてて良いのですが、痛いものはしかたないので Filco の Magestouch 使うようにしました。案の定指の痛みは和らぎました。

普段職場ではかなりの鍵圧でキーボード叩いているので、利用時間の少ない Magic Keyboard に自分の体を最適化するのはやはり無理があったのでしょう。

しかし、1万円以上出して購入した Magic Keyboard をキーボード墓場*1送りにするのは勿体ない。ということで、モバイルへの転用を検討。

Nexus 6P で使ってみる

Nexus 6P で使えるかペアリングさせてみました。まず、日本語と英語の切り替えが画面タップしないとできない。これは面倒です。ATEN CS533 で Realforce を使ってると漢字キーで切り替えられました。

blog.kondoumh.com

109 キーボードと認識させても、構造上漢字キー相当のアサインができないのでしょう。あと、 | (パイプ) , ¥ , _ (アンダースコア) が入力できない。これはコード書く上では致命的です。

そういえば、BootCamp の Windows でもアンダースコア入力できない問題がありました*2

ということで Android デバイスとのペアリングは厳しいという結論です。

iOS の JP 配列サポート

iOS の物理キーボードのサポートは US 配列のみとずっと思ってました。アプリによっては JP 配列を認識するものもあるので全く使えないというわけではないですが。

iPad Pro の純正キーボードカバーは US 配列だし、過去 Wireless Keyboard をペアリングした時も アプリによって US 配列と認識されて使いにくかった記憶があったのです。

iPad Air で使ってみた

モノは試しということで iPad Air にペアリングしてみました。

これは、予想外でした。キーマップは完璧で Prompt のような ssh アプリでもちゃんとキートップの記号と入力される記号が一致するじゃないですか。Wireless Keyboard の時よりも精度が上がっています。

iPad で物理キーボード使うと、入力モードが日本語か英語かという情報はどこにも表示されず、入力開始しないと判然としないのですが、かなキーを押すと必ず日本語、英数キーを押すと必ず英語になるので、現在のモードを覚えるという脳への負担がなく作業効率が格段に上がります。

アプリによりますが OS X の Emacs ライクなキーバインドもかなり使えるし、Ctrl キーが A の左にあるので ssh でターミナル使う時もストレスフリーです。

blog.kondoumh.com

この投稿では Wireless Keyboard US を使ってダメだったのでソフトウェアキーボード使ってましたが、もはやそんな苦労は要りません。

Function キーでビデオ再生のオンオフや音量を調整できたり、iPad と共通の Lightning ケーブルで充電できたりと Magic Keyboard は iPad のコンパニオンデバイスとして最高じゃないかと思います。

さらに Magic Keyboard は 充電式になって、薄く軽くなっているため Mobile にも適合します。出張や帰省のお供に、リビングコンピューティングに最適ですね。

こうなると今まで出番が少なかった風呂蓋カバーも俄然折りたたみ可能なスタンドとしての用途が出てきます。持ち歩くときはこんな感じですね。

入力デバイスがよくなるだけで、iPad Pro じゃなくても十分にプロダクティブなデバイスになれることが分かります。

なんか 2in1 なデバイスに進化した気がします。

自分は初代 iPad Air のパフォーマンスでも不満ありませんが、Air 2 / Pro 9.7 inch ユーザーにもお勧めな使い方ではないでしょうか*3

もうすでに活用している方がいらっしゃいました。

estpolis.com

モバイル用途なら浅すぎるキーストロークも許容範囲ですね。でも調子に乗って打ってるとやはり指先が痛いですw

追記) 現在の自宅作業環境

*1:Apple Wireless Keyboard US/JP などが眠ってます。

*2:Wireless Keyboard なら、BootCamp 環境で問題なく使えてたのでそのうち対応されるとは思いますが。

*3:Air と Pro の風呂蓋は下位互換性がないかもですが

Cardboard の世界

Gadget Android

アーリーアダプターの方々が Oculus Rift とか HT Vive を入手してその素晴らしさを発信し始めたので、まずはお手軽な Cardboard を体験してみようと思い VR SHINECON の 3D ヘッドセットを買ってみました。

TechMe VR 3Dグラスメガネセット 3D動画 6インチ以下のスマホ対応 プラスチック製

TechMe VR 3Dグラスメガネセット 3D動画 6インチ以下のスマホ対応 プラスチック製

数千円のヘッドセットですが、結構しっかりした作りでした。スマホとの距離や両眼のレンズの離れ具合は簡単に調整できました。眼鏡の装着は無理。

f:id:kondoumh:20160516230210j:plain

Nexus 6P の装着は簡単だけど、金具のバネを広げてはめ込むのがちょっと面倒でした。

f:id:kondoumh:20160516230640j:plain

Oculus は DK2 のデモは体験したことがあるので スマホの解像度と処理能力ではそれほどの没入感は得られないだろうなと思いつつ、いくつかのアプリを試してみました。

まずは、ジェットコースターアプリ。ただ乗って周囲の景観を眺めていればいいだけ。Oculus のジェットコースターデモでは、遠心力とか加速度を体感できるレベルだった記憶があります。そこまでの迫力はないけど、かなりよくできていました。

play.google.com

東京の名所に滞在できるアプリ。地面のマーカーに注視点というかカーソルを合わせることで、場所移動できたりします。

play.google.com

人間の体内?に分子レベルのサイズになって入り込んで悪いウィルスを退治する・・みたいなレーシングゲーム? これもマーカーを一定時間注視することで、シーンが切り替わっていくタイプでした。

play.google.com

Google Street View は通常のスマホアプリですが、Cardboard モードがあります。マーカーはタッチが前提なので、Cardboard 装着する場合は Wireless のコントローラーが必要になります。今回は Apple Wireless マウスをペアリングしてマウスカーソルを表示させてみました。正直マウスだと厳しかったです。

play.google.com

まだ無料アプリしか試していませんが、しばらく楽しめそうです。

Google I/O 2016 では、Cardboard の進化系のプラットホーム Daydream が発表されていました。

vr.google.com

ハイスペックなスマホが要求されるんでしょうけど、安価で手軽に VR 体験ができることから Oculus や PlayStation VR のようなゲーム用途とは異なるユースケースで普及していくかもしれません。

Moto 360 2nd gen を買った

Android Gadget

Moto 360 の第2世代が日本の Amazon でも買えるようになっていてお値段も手頃なので Nexus 6P のコンパニオンとして購入してみました。

こんな感じの箱で来ました。同梱物は本体と充電用クレードル、MicroUSB ケーブルと説明書(日本語の説明書はありません)。 f:id:kondoumh:20160516220244j:plain

クレードルに乗せると自動的に起動しました。 言語は日本語を指定可能。 f:id:kondoumh:20160516220752j:plain

同期のため、スマホ側で Android Wear アプリのダウンロードを促されます。 f:id:kondoumh:20160516220850j:plain

ダウンロードして同期開始。 f:id:kondoumh:20160518010943p:plain

それなりに時間がかかります。20分ぐらい。 f:id:kondoumh:20160516221220j:plain

同期・充電完了。腕時計は20年ぶりぐらいです。スーツにも合います・・よね? もう少し普通の時計っぽいかと思ってましたが、若干おもちゃっぽいかもです。 f:id:kondoumh:20160517073754j:plain

フィットネスアプリ、 Ingress、Google Play Music、Pocket Casts などをでかい Nexus を取り出さなくても操作できるのはそれなりに便利かなぁ。

結構よかったのが、ポモドーロアプリとの連携。25分集中してたら時計がブルって休憩を促してくれます。 f:id:kondoumh:20160518010953p:plain f:id:kondoumh:20160517212703j:plain

活動量計が Nexus 6P 本体だけだと弱いので、 普段身につける意味はあると思います。Google Fit と Moto Body をどうやって連携させるのかいまいちわかってませんが。

ちなみに時計表示をオフらない設定で、夜の11時半ぐらいまで装着したあと電池の残量は 31%でした。

ATEN PC スマホ切替器 CS533 を再び導入したら Nexus 6P が PC になった話

Gadget Keyboard Android

前買ったのは初期不良品?

2年前買った ATEN のキーボード切替器 CS533。Bluetoothスマホ USB で PC と接続して Alt キー2連打で スマホと PC を切り替えできます。給電は PC の USB からなので配線も簡単。オフィスで PC につないでいるキーボードを切り替えて使えるため、専用の Bluetooth キーボードより利便性が高くて好きでした。

kondoumh.hatenablog.com

常駐先で1ヶ月ぐらい便利に使ってたのですが、時々起動がうまくいかなくなったり不安定で、突然動作しなくなりました。いい買い物したと思ったのですが残念な気持ちで廃棄処分。

Nexus 6P をメインで使うようになって、この画面サイズと性能なら外付けキーボードさえあれば PC の代わりに使える気がしてきました。オフィスで使いたいのでやはり CS533 的なソリューションがベスト。CS533 は2年間リニューアルされていません。類似製品も出ていないようです。

すぐに壊れたのが不安材料ですが「あれはきっと初期不良品をつかんだからにちがいない」と自分を説得し再び Amazon で発注。

快適に使えています。2週間ほど使ってますが今のところ不具合も発生していません。スマホスタンド部分がイマイチなのは相変わらずですが、PC のキーボードが使えるのはやはりキラーですね。

Nexus 6P でコード書ける

Nexus 6P の 5.7 インチ ディスプレイだと ssh の画面も普段 Laptop で使っているターミナルのサイズぐらいなんで普通に使えてしまいます。tmux / Emacs 環境はやはり物理キーボードだと捗ります。ターミナルソフトは JuiceSSH を使ってます。iPad でコード書く必要ないですね。

f:id:kondoumh:20160409174302j:plain

play.google.com

アンロック簡単・マウスも使える

Nexus 6P は指紋のアンロックが背面にあるのでロック解除が面倒かと思ってたのですが、これのおかげで画面スワイプだけでアンロックされます。これは神機能ですね。

以前は iPhone 5s とペアリングさせていたので使っていなかったのですが CS533 はマウスもつながるので Android で普通にマウスカーソルが出てアプリ操作できます*1

テキスト入力も快適

Androidテキストエディタは DroidEdit を使ってます。これはキーバインドが 普通の Windows アプリと同じです。

play.google.com

当たり前に Google 日本語入力なので変換効率は PC と同じ。漢字キーで日本語と英語トグルできます。これが iOS だと物理キーボードによる言語の切り替えがかなり面倒なのでソフトウェアキーボードを使ってしまいますが、物理キーボードの入力スピードは出せません*2

PC 持ち歩かなくてもいい時代に

Android N でマルチウィンドウ対応したらますます PC のユースケースをカバーしてきそうです。

あとは、持ち運び用に 折りたたみ Bluetooth キーボードが一つ欲しいですね。

↓とかがよさげです。

ということで Android 端末は PC として立派に使えますっていうお話でした。

Chromecast で TV に画面飛ばせるし、いけそうですね。

Windows 10 Mobile は 先日の Build 2016 では話題にもされなかったということでもうオワコン感が漂ってます。。。いや、まだ分かりませんが。

*1:iOSJailbreak しないとダメらしい

*2:iPad Pro 用のキーボードカバーだと地球儀のアイコンのキーがあってトグルできるみたいです