高尾宏治日記 on はてなブログ

プログラミング言語Rubyを中心とした技術情報を扱うブログです(Microsoft Surfaceはやめました)。

Turnipによる受け入れ試験中に、Rails.envをtestではないのもの(standalone)に変更する方法 (その1) #RubyJP

smalruby-editorの受け入れ試験はTurnipで実装

開発中のWebベースのテキストエディタ smalruby-editor では、ローカルマシンで smalruby-editor コマンドを実行すると、Webベースのエディタを起動できる standalone モードというのを提供しています。これは、 Rails.envstandalone に設定して、いくつかの環境変数の設定と、ホームディレクトリにログなどのファイルを書き込むように設定してからRailsのサーバ( rails server コマンドで起動するやつ) を起動することで実現しています。

standalone モードのときには作成したプログラムをローカルマシンに直接保存する機能を提供する予定なのですが、この機能の受け入れ試験 (spec/acceptance/ 以下の feature ) の実装が難しくて困っています。

smalruby-editor の受け入れ試験は Turnip を使って記述しています。

特定のシナリオのRails.envを切り替える

feature の途中で standalone モードに切り替えるためには Rails.env = 'standalone' を実行する必要があります。これは、 spec/spec_helper.rb に以下の記述をして、当該 feature のシナリオに @standalone タグを付与することで実現できました。

config.before(standalone: true) do
  @_rails_env = Rails.env
  Rails.env = ENV['RAILS_ENV'] = 'standalone'
end

config.after(standalone: true) do
  Rails.env = ENV['RAILS_ENV'] = @_rails_env
end

でも、これだけではダメでした。

求む、任意のタイミングで*.js.coffee.erbを再コンパイルする方法

どのようにダメかというと、smalruby-editor では、 app/assets/javascripts/editor.js.coffee.erb の中で、 <% if Rails.env == 'standalone' %> といった ERB での条件分岐を行っています。いくつかの動作確認の結果から、 feature の処理中に app/assets/javascripts/editor.js.coffee.erb は一度しかコンパイルされないため、最初にコンパイルしたときの Rails.env (test か standalone のどちらか) のものを使い続けることがわかりました。 (ruby 2.0.0-p353rails 4.0.2)

私としては、@standalone タグを付与したシナリオがあれば再コンパイルをさせたいのですが、その方法がわかっていません。

PhantomJS がキャッシュしているのかもしれませんし、Rails がキャッシュしているのかもしれません。なかなか難しいです。

もう少し調べてみて実現が難しそうだったら別の方法を考えることにしようと思います。別の方法とは standalone モードかどうかの条件分岐を *.js.coffee.erb で行うことはやめて、 *.html.erb で行うというものです。

でも、app/assets/javascripts/editor.js.coffee.erb を任意のタイミングで再コンパイルする方法を知っておくのも面白そうなので、もう少し調べてみようと思います( ̄▽ ̄)

Surface Pro/Windows 8.1から、Surface Pro 2/Windows 8.1へのデータの移行。 #SurfaceJP

ついにSurface Pro 2を手に入れたのですが、Surface Pro/Windows 8.1からデータを移行する手段がないことを知りました orz

転送ツールがインポートのみの動作になっている

Windows 8Windows 8.1はデータを転送できるのですが、Windows 8.1→Windows 8.1はできないとのこと。う~ん、いまだにファイルの転送をユーザに強いるなんてありえないと思いつつも、愚痴を言っててもしょうがありません、やるしかないです。

クラウド(SkyDrive)経由は、遅すぎるのと、ファイルのバイト列以外の情報(権限とか)が消えてしまうので別の方法にします。

そこで、いったんMicro SDにファイルをコピーすることにしました。

また、Cygwinの操作配下のものはCygwinのtarで圧縮することにしました。これなら権限が適切に保持されるはず、と思ったら tar コマンドで展開すると mklink コマンドで作成したリンクの権限が Administrator からユーザに変わってしまうことがわかりました。なかなか難しい。それに、どうやって移行先の Surface Pro 2 で tar で圧縮したファイルを展開すればいいのでしょう(笑)Cygwinがインストールされていませんからね。困ったな~。

とりあえず、以前 Surface Pro を交換修理したときの手順書を元に手作業で移行することにしました。

以下はその作業記録です。

Emacs: gnupack 24.3-20130503

Emacsさえ動作すれば、あとはどうとでもなる。

  • gnupackからemacs-24.3-20130503.exeをダウンロード・インストール。
    • 展開先は「C:\」
  • SkyDrive上のバックアップからdot.emacs.dなどを配置。
    • 以下、管理者権限のコマンドプロンプトで実行。またSkyDrive直下のdotfilesにバックアップを格納していることが前提。
C:\Users\kouji>mklink /d .emacs.d .\SkyDrive\dotfiles\dot.emacs.d
.emacs.d <<===>> .\SkyDrive\dotfiles\dot.emacs.d のシンボリック リンクが作成されました

C:\Users\kouji>mklink .gitignore .\SkyDrive\dotfiles\dot.gitignore
.gitignore <<===>> .\SkyDrive\dotfiles\dot.gitignore のシンボリック リンクが作成されました

C:\Users\kouji>mklink .gitconfig .\SkyDrive\dotfiles\dot.gitconfig
.gitconfig <<===>> .\SkyDrive\dotfiles\dot.gitconfig のシンボリック リンクが作成されました

C:\Users\kouji>mklink .bashrc .\SkyDrive\dotfiles\dot.bashrc
.bashrc <<===>> .\SkyDrive\dotfiles\dot.bashrc のシンボリック リンクが作成されました

C:\Users\kouji>mklink .profile .\SkyDrive\dotfiles\dot.profile
.profile <<===>> .\SkyDrive\dotfiles\dot.profile のシンボリック リンクが作成されました

C:\Users\kouji>mklink .gemrc .\SkyDrive\dotfiles\dot.gemrc
.gemrc <<===>> .\SkyDrive\dotfiles\dot.gemrc のシンボリック リンクが作成されました

C:\Users\kouji>mklink .inputrc .\SkyDrive\dotfiles\dot.inputrc
.inputrc <<===>> .\SkyDrive\dotfiles\dot.inputrc のシンボリック リンクが作成されました

C:\Users\kouji>mklink .minttyrc .\SkyDrive\dotfiles\dot.minttyrc
.minttyrc <<===>> .\SkyDrive\dotfiles\dot.minttyrc のシンボリック リンクが作成されました

C:\Users\kouji>mklink .ruby-version .\SkyDrive\dotfiles\dot.ruby-version
.ruby-version <<===>> .\SkyDrive\dotfiles\dot.ruby-version のシンボリック リンクが作成されました

C:\Users\kouji>mklink .screenrc .\SkyDrive\dotfiles\dot.screenrc
.screenrc <<===>> .\SkyDrive\dotfiles\dot.screenrc のシンボリック リンクが作成されました

C:\Users\kouji>mklink .zshrc .\SkyDrive\dotfiles\dot.zshrc
.zshrc <<===>> .\SkyDrive\dotfiles\dot.zshrc のシンボリック リンクが作成されました
  • 環境変数の追加
    • HOME: C:\Users\kouji
    • Path: C:\tools;C:\emacs-24.3-20130503\bin

いろいろなソフトウェア

  • Windowsストアアプリのインストール
    • 基本的にインストール済みのもの(FacebookTwitter)をすべて再インストールすればいい。
  • iTunes
    • 同時にQuickTimeをインストール
    • 2013/12/29現在、iCloudコントロールをインストールすると休止状態から復帰しなくなることが分かったのでここではインストールしない
  • OutlookにGmailのアカウントを設定
    • Outlookのオプションは引き継がないようだ。Surface ProのOutlookのオプションを見ながら手作業で移行
  • 7-Zip
    • 7z920-x64.msi をインストール
  • プリンタ Cannon MP640 のインストール
    • mp68-win-mp640-1_05-ej.exe
  • Skitchのインストール
    • skitchsetup-2.3.0.10.exe
  • Oracle VirtualBoxのインストール
  • Firefoxのインストール
  • Google Chromeのインストール

Cygwin関連

  • Surface ProのCygwinのキャッシュディレクトリC:\Users\kouji\cacheを移行
    • Cygwinのパッケージのダウンロード時間を大幅に短縮できる
  • Cygwin
    • 64ビット版をインストール。32ビット版は正しく動作しないことがわかっている。
    • gcc-core
    • git
    • git-svn
    • make
    • patch
    • libncursesw-devel
    • openssl-devel
    • readline
    • libsqlite3-devel
    • libxml2-devel
    • libxslt-devel
    • wget
    • ruby
    • zip
    • unzip
    • screen
    • zsh
    • openssh
    • ncurses
    • Publishing以下のすべて (←これはとっても時間がかかるから、時間があるときにあとからインストールすることをオススメします)
  • setup-x86_64.exe を C:\cygwin64\bin に移動
    • ついでにスタートにピン止めしておく
  • /etc/passwordのkoujiを以下のように修正(秘密っぽいところは伏せています)。修正後にCygwinのシェルを再起動。
(修正前)
kouji:unused:1001:513:kouji takao,U-kouji-surface2\kouji,****:/home/kouji:/bin/bash
(修正後)
kouji:unused:1001:545:kouji takao,U-kouji-surface2\kouji,****:/cygdrive/c/Users/kouji:/bin/bash

データの移行

  • ~/work以下
    • 私は C:\Users\kouji/work 以下に作業環境一式を配置していますので、移行元の Surface Pro にて work 以下を tar cpzf work.tar.gz work で圧縮して、移行先の Surface Pro 2 にて tar xpzf work.tar.gz で展開しました。
  • 単純にコピーしたもの
    • \tools
    • \Users\kouji.VirtualBox
    • \Users\kouji.bash_history
    • \Users\kouji.bundle
    • \Users\kouji.gem
    • \Users\kouji.heroku
    • \Users\kouji.lesshst
    • \Users\kouji.relish
    • \Users\kouji.s7
    • \Users\kouji.smalruby-editor
    • \Users\kouji.ssh
    • \Users\kouji.subversion
    • \Users\kouji.travis
    • \Users\kouji.uru
    • \Users\kouji\local
    • \Users\kouji\VirtualBox VMs
    • \Users\kouji\Music\iTunes
  • \Users\kouji.sshCygwinシェルで権限を変更
chgrp -R Users .ssh
cd .ssh
chmod 600 authorized_keys config id_rsa id_rsa.new known_hosts

Ruby関連

基本的に work 配下に Ruby 処理系があるため移行は完了しているので、こまごまとした設定を行う。

cd \
mklink /d Ruby \Users\kouji\work\uru\versions\ruby-2.0.0-p353-i386-mingw32\bin
Set-ExecutionPolicy RemoteSigned -Scope LocalMachine
  • PowerShellの設定

    • レイアウト - 画面バッファーのサイズ - 幅: 80
    • レイアウト - ウィンドウのサイズ - 幅: 80
    • レイアウト - ウィンドウの位置 - システム設定を使う: チェック
    • 画面の色 - 画面の背景: 黒
  • Gitのインストール

    • Git-1.8.4-preview20130916.exe
    • Adjusting your PATH environment: Run Git and included UNIX tools from the Windows Command Prompt
    • 次の選択肢は真ん中の「Checkout as is, Commit Unix」みたいなの。
  • Heroku Toolbeltのインストール

    • heroku-toolbelt.exe
  • MySQLのインストール

    • mysql-installer-community-5.6.14.0.exe
  • node.jsのインストール

  • インストール後はPower Shellを再起動させること

とりあえずはこんなところです。

Surfaceグループの紹介

Surface全般を扱うはてなグループ Surface に参加してみませんか? みなさんの参加をお待ちしております!!

我が家にも、Surface Pro 2がやってきた! #SurfaceJP

(「我が家にも、○○がやってきた!」シリーズです)

財政難から一転、さまざまな経済効果によって、我が家にもSurface Pro 2 512GBがやってきました。あらためて、ハードウェアとしては最高の出来ですね!(ただ、8才の息子からすると、MacBook Air 11インチのほうがかっこいいらしいけど...)

今回の開封の儀は動画にしました。

初期設定は簡単ですね♪困ったのはコンピュータ名くらいで、細かい設定はMicrosoftアカウント経由でSurface Proの設定をPro 2に引き継いでくれたようです。ただし、Windows 8.1にはTime Machine相当の機能はありませんので、これから地道にデータを移動する必要があります。

Surface Pro 2にはWindows 8.1がプリインストールされているため、Windows 8.1へのアップデートは必要ありません。また、恒例のWindows Updateはたったの1時間です。

「さぁ、これでSurface Pro 2が使えるぞ!」なんて、思ってはいけません(笑)

次は初期不良に当たってしまっていないかの確認です。Surface Proのときの経験から おおよそ3割はハードウェアかソフトウェアの問題がある と感じています。

私は次のようなチェックをしています。まだ途中ですが、見事、問題にぶち当たりました!!

  • [確認済み]10回以上、ふっと上に持ち上げる
    • Surface Proではこれだけで再起動することがあり、本体を交換してもらいました。
  • [確認済み]スリープ→休止状態→復帰を繰り返す
    • 問題発生!!
    • 3割程度の確率で復帰せずに通常の再起動になりました。これはWindows 8.1の問題でかつ、サポートに電話すると「初期化してください」「そのようなハードウェアを接続していると保証外です」とかなんとか言われて無視されるため、後述する回避策をとります。
  • [未確認]Bluetooth機器を接続、スリープ→復帰→Bluetooth機器の動作確認
    • 現在ではWindows Updateによって解消されていますが、Surface Pro/Windows 8.1の初期段階では復帰後にBluetooth機器が使えませんでした。
  • [未確認]Bluetooth機器を接続、スリープ→休止状態→復帰→Bluetooth機器の動作確認
    • 現在ではWindows Updateによって解消されていますが、Surface Pro/Windows 8.1の初期段階では復帰後にBluetooth機器が使えませんでした。
  • [未確認]Bluetooth機器を接続して10分以上動作確認
    • 接続が切れることがあるようです。
  • [未確認]タイプカバー2を装着して、カバーを閉じてスリープ→復帰→タイプカバー2の動作確認
    • Windows Updateによって、復帰後、しばらくしないとタイプカバー2が使えないように改悪されました。このことから今後より改悪されることが予想されるためチェックしています。
  • [未確認]タイプカバー2を装着して、カバーを閉じてスリープ→休止状態→復帰→タイプカバー2の動作確認
    • Windows Updateによって、復帰後、しばらくしないとタイプカバー2が使えないように改悪されました。このことから今後より改悪されることが予想されるためチェックしています。
  • [未確認]チャームを出したり消したりといったエッジの動作確認を行う
    • タッチパネルの異常によって右上部の反応しないケースがあったとのことです。

スリープ→一定時間経過→休止状態→復帰失敗→通常再起動によってスリープ前の情報消失の回避策

私はSurface Pro 2に次の機器を接続しています。

この状態だと、スリープ→一定時間経過→休止状態→復帰失敗→通常再起動によってスリープ前の情報が消失してしまいます。 これは10回のうち3回ほど発生しました。3割の確率で正常にシャットダウンしないなんて怖すぎます。ファイルシステムが壊れてディスクが読めなくなるかもしれません。

Surface Pro 2の初期設定では、スリープ後に一定時間経過すると休止状態になります。バッテリ駆動時は60分、電源接続時は180分です。 それらの設定を変更してどちらの場合も休止状態にならないようにすればOKです。(いや、全然OKじゃないんだけど...) 休止状態にしない場合は、スリープ中もどんどんバッテリを消費していき一晩で電源が切れてしまうこともあるでしょう。寝る前には必ず電源に接続するようにしましょう。

と、ここまで書いてなんか悲しくなりました。

この事象は毎回発生するわけではないですし、Microsoft製品以外のBDドライブ、液晶モニタを接続している場合はMicrosoft(の日本法人)はユーザ側の問題だということで対応しないでしょうね。確実に再現する方法が見つかればいいのですが、それをユーザに求めるサポートってどうなのでしょうね?せめて、レドモンドに休止状態に問題がある可能性があることだけでも伝えてもらえるといいのですが...

Surfaceグループの紹介

Surface全般を扱うはてなグループ Surface に参加してみませんか? みなさんの参加をお待ちしております!!

僕のサンタは、ごうぎん起業家大賞の方からやってきたようです!

今年は、私のところにもサンタさんがやってきました! ごうぎん起業家大賞という山陰合同銀行主催のビジネスプランコンテストにおいて、私が提案したプランが最優秀賞を受賞しました。(最優秀賞といっても私を含めて4組の受賞です)

「ごうぎん起業家大賞」最優秀賞決定について(PDF)より

No.1 高尾 宏治 様
ぼくたちRubyプログラミング少年団!
島根県・松江市が利用促進するRubyを使ったプログラミング学習教材の開発、
プログラミング学習塾を運営。

と~ても、うれしいです!!

これまでMatsue.rb松江市 中学生Ruby教室などの活動を続けてきたからこそ、受賞できたのではないかと思います。それらを続けてこられたのはMatsue.rbのメンバー松江市役所の方々の協力があってこそです。みなさんに感謝します。

また、受賞して感じたのは、島根県と松江市のみなさんが、Rubyに対してとても暖かい気持ちを持っておられるということですね。あらためて、このような地域だからこそプログラミング専門の学習塾が運営できる(可能性がある)と感じました!

実際に学習塾を運営するのは2015年度~を想定しています。来年度はその準備期間として教材を開発したり受講生を募集する予定です。興味がある方はメール (kouji dot takao at gmail dot com)、FacebookTwitterなどでご連絡いただければと思います。

よい正月が迎えられそうです!

松江Ruby会議のスタッフ募集 #RubyJP #matsuerb

松江市周辺で活動しているプログラミング言語Rubyのコミュニティ「Matsue.rb」は、2014/3/15(土)に「松江Ruby会議」を行うことを予定しております。

「松江Ruby会議」とは、Rubyに関連するエンジニアを対象としたイベントで、Rubyに関連したいろいろな講演を聞くことができます。またイベント終了後は懇親会にてエンジニア同士の交流を深めることができます。参考URL: 第1回第2回第3回第4回

そこで、「松江Ruby会議」の企画・運営を手伝っていただくスタッフを募集します。 イベント当日である3月15日までの毎月1回程度の打ち合わせに参加していただける方であれば、どなたでも応募いただけます。

スタッフに応募される方は Facebook の Matsue.rbグループ で「松江Ruby会議のスタッフやります!」とコメントいただくか、または Twitter で #matsuerb ハッシュタグをつけていただき「松江Ruby会議のスタッフやります! #matsuerb」とつぶやいてください。もちろん、Matsue.rb定例会などで直接連絡いただいてもかまいません。

スタッフの具体的な役割を次に挙げます。応募の参考にしていただければと思います。

  • 当日まで
    • 企画への参加
    • 講演者の検討
    • イベントの公式ウェブサイトのデザイン
    • 懇親会の手配
    • イベントTシャツのデザイン
  • 当日
    • 会場準備
    • 受付
    • 司会
    • レポート
    • 懇親会の会計

それではよろしくお願いします。

Windows 8.1で、複数のRubyを切り替えて使いたいならuruがいいよ!(残念ながらpikはオワコンです) #RubyJP

Error when running pik in Powershell より

@devert and @chiefy I will recommend you use uru instead:

https://bitbucket.org/jonforums/uru

While it doesn't install the versions of Ruby, it works much better than Pik.

Considering I haven't had time to work on pik over the last year or so, I think will be better option.

なんと、 pik はオワコンでしたか...。誰しも暇な時もあれば忙しいときもあり、忙しければOSSのメンテナンスはできなくなるもの。これは仕方がありませんね。

ということで、上記で紹介されている uru に乗り換えました。

Unleash Ruby に書いてある通りにすればあっさりインストールが完了します。uru はGO言語で実装されているのですが、ソースコードをざっと見た限り簡潔な記述ができる言語ですね。しかもWindows、Mac、Linuxのバイナリをコンパイルできるというね。すばらしい!

そりゃ、HerokuもRubyからGOにゴーサイン出しますわ。ゴーサイン。ゴー...

uruとpikの比較

せっかくなので pik とのコマンドの比較をまとめておきます。

  • uruやpik自体のインストール
    • uru: C:\tools の作成。ダウンロード・解凍した uru_rt.exe をそのディレクトリにコピーする。環境変数Pathに C:\tools を追加する。
    • pik: インストーラ
  • Ruby処理系の登録
    • uru: uru admin add <DIR> [--tag <名前>]
    • pik: pik add <DIR>
  • Ruby処理系の一覧
    • uru: uru ls
    • pik: pik list
  • Ruby処理系の切り替え
    • uru: uru <名前>
    • pik: pik use <名前>
  • デフォルトのRuby処理系の指定
    • uru: なし
    • pik: pik use <名前> --default
  • Ruby処理系のインストール
    • uru: なし
    • pik: pik install <名前>。ただし、古いRubyにしか対応できていない。

uruPowerShell で使えるのがいいですね。ただ、 PowerShell の権限を変更しないといけませんが... 参考: about_Execution_Policies

Ruby on Rails」「プログラミング初心者」のはてなグループの紹介

Ruby on Rails Ruby on Rails や、プログラミング初心者 プログラミング初心者はてなグループに参加してみませんか? みなさんも気軽にご参加ください!!

Windows 8.1で、Rails 4.0.1環境 (MySQL) を構築する (その2) #RubyJP

昨日の記事 の修正です。

mysql2のコンパイル済みバージョンはRuby 1.8系と1.9系のみしか提供されていません。2.0系は自前でコンパイルする必要があります。ということで、Ruby 2.0 (MinGW) で mysql2 が動かない を参考にして、DevKitをインストールしたRuby 2.0.0-p246の用意ができたら、コマンドプロンプトで以下を実行します。なお、記事に従って mysql-connector-c-noinstall-6.0.2-win32.zipC:\ に展開しています。

gem install mysql2 -- --with-mysql-lib="C:/mysql-connector-c-noinstall-6.0.2-win32/lib" --with-mysql-include="C:/mysql-connector-c-noinstall-6.0.2-win32/include"

以下、想定している実行結果です。

This could take a while...
Successfully installed mysql2-0.3.14
1 gem installed

これでmysql2がインストールできました。 そのほかにも フリーエンジニアライフ でいろいろ紹介されているので問題になったときに作業するつもりです。

Ruby on Rails」「プログラミング初心者」のはてなグループの紹介

Ruby on Rails Ruby on Rails や、プログラミング初心者 プログラミング初心者はてなグループに参加してみませんか? みなさんも気軽にご参加ください!!