Umi Uyuraのブログ

Titaniumを使ったスマートフォンアプリ開発を中心に、プログラミング関連の作業ログ。

Robo 3T(旧Robomongo)でmLab(Heroku Add-on)につなぐ

オープンソースのMongoDBクライアントであるRobomongoをたまに使っていたのですが、いつの間にか高機能なMongoDB IDEのStudio 3T(旧MongoChef)の会社に買収されて、Robo 3Tという名前になっていました。

Robomongo is now Robo 3T, with MongoDB 3.4 support

というわけで、MongoDBのHerokuアドオンであるmLabにRobo 3Tでつないだ際のメモです。

確認環境

項目 バージョン等
OS Mac OS X 10.11.6
Robo 3T 1.1.1

mLabへの接続情報の確認

mLabへの接続情報は、環境変数 MONGODB_URI にあります。

プロジェクトフォルダにて以下のコマンドを叩くか、Heroku Dashboardから該当アプリのConfig Variablesから確認します。

$ heroku config:get MONGODB_URI -a <app name>

すると、以下の様な形式の文字列が取得できます。

mongodb://<user>:<password>@<host>:<port>/<database>

mLabへつなぐ

Robo 3Tを起動すると出て来るダイアログで「Create」を選択する。

f:id:umi-uyura:20171019235344p:plain

Connectionタブの以下の項目に、接続情報から以下のものを転記する。

  • Address: <host> : <port>

f:id:umi-uyura:20171019235405p:plain

Authenticationタブの以下の項目に、接続情報から以下のものを転記する。

  • Perform authenticationにチェックを入れる
  • Database: <database>
  • User Name: <user>
  • Password: <password>

f:id:umi-uyura:20171019235420p:plain

「Test」ボタンを押して、接続確認。

f:id:umi-uyura:20171019235437p:plain

「Connect」を押して接続。

f:id:umi-uyura:20171019235453p:plain

おわり

Robo 3Tもマルチプラットフォームで展開されているので、WindowsLinuxでも使えます。

DBeaverでHeroku Postgresにつなぐ

久々にHerokuを触ることになり、DBもHeroku Postgresなので、Windowsで使えるPostgreSQLGUIクライアントがないかと探していたところ、良さそうなものを発見。

DBeaver

PostgreSQL専用というわけではなく、MySQLSQLiteなどいろいろなデータベースをサポートしている上に、実はマルチプラットフォームで展開しているものでした。

で、いざHeroku Postgresにつなごうとしたところで、単純にDatabase Credentialsをコピペしただけでは繋がらなかったので、接続方法をメモ。

確認環境

項目 バージョン等
OS Windows 10 Pro
DBeaver 4.2.0

Heroku Postgresへの接続情報の確認

Heroku Postgresへの接続情報は、環境変数 HEROKU_POSTGRESQL_COLOR_URL (※ COLOR 部分はいろいろと変わる)にあります。

プロジェクトフォルダにて以下のコマンドを叩くか、Heroku Dashboardから該当アプリのConfig Variablesから確認します。

$ heroku config:get HEROKU_POSTGRESQL_COLOR_URL -a <app name>

すると、以下の様な形式の文字列が取得できます。

postgres://<user>:<password>@<host>:<port>/<database>

Heroku Postgresへつなぐ

左側に表示されるDatabase Navigator内で右クリックして「Create new connection type」、もしくはメニュー「Database」→「New Connection」を選ぶ。

f:id:umi-uyura:20171018235534p:plain

Select new connection type内で「PostgreSQL」を選択する。

f:id:umi-uyura:20171018235547p:plain

Generalタブ内で、先に調べた接続情報から以下のものを転記する。

  • host
  • port ※たぶんPostgreSQLのデフォルトポート 5432 が設定済
  • database
  • user
  • password

f:id:umi-uyura:20171018235600p:plain

Driver propertiesタブ内で「sslmode」に require と入力する。

f:id:umi-uyura:20171018235613p:plain

「Test Connection」で問題がなければ、あとは「Next」「Next」「Finish」でOK。

f:id:umi-uyura:20171018235625p:plain

Driver propertiesの「sslmode」の設定をしていないと、接続時にエラーになります。

ということが、Herokuドキュメントに書かれていました。

Connecting to Heroku Postgres Databases from Outside of Heroku | Heroku Dev Center

おわり

MacではPSequelをメインで使っていましたが、わりとDBeaverの使い勝手が良かったので、個人Macにも導入することにしました。

gnupackのCygwinを指定したディレクトリで開く

先日、 chereエクスプローラからCygwinを開く設定を付けましたが、Emacsで作業中にカレントディレクトリをCygwinで開きたい場合があり、その方法を調べてみました。

やり方

  1. クリップボードに、Cygwinを開きたい Windowsのパス を格納する。
  2. startup_cygwin.exeを実行する
$ cygpath -w "$(pwd)" | tr -d '\n' > /dev/clipboard && /root/startup_cygwin.exe 

Windowsclip コマンドでも良かったのですが、文字化けすることがあったので変更。

間に tr を入れているのは、 cygpath の出力結果に含まれる最後の改行があると、移動がおこなわれなかったためです。

この設定に気づいたきっかけ

gnupackの設定ファイルを眺めていたときに、Chdir_With_Clipboard という項目を発見。

もしかして、クリップボード上のパスへのディレクトリ移動フラグ?と気付いたのがきっかけで、それならこんなことできるかも?と試してみました。

/root/startup_config.ini

 [startup_cygwin.exe]
    Cmdline_Image        = "%term.exe%" -e "%bash.exe%"
    Application_Id       = Mintty
    Init_Current_Dir     = %HOME%
    Chdir_With_Clipboard = yes
    Synchronous_Run      = no
    Load_Private_Font    = yes
    Tune_Cygwin_Mount    = yes
    Tune_Cygwin_Profile  = yes
    Convert_Cygwin_Path  = yes

Emacsから呼び出す

Lispはよくわからないので、シェルスクリプト経由で開くことにしました。

こんな感じのスクリプトをPATHが通った場所に設置。

Open current directory in Cygwin

それをEmacsから呼び出す関数を用意して、適当なキーバインドを割り当て呼び出しています。

https://github.com/umi-uyura/dot.emacs.d-gnupack/blob/master/lisp/win-open-folder.el

(defun open-cygwin()
  "cyghere CURRENT-DIRECTORY"
  (interactive)
  (process-query-on-exit-flag (start-process-shell-command "open folder in Cygwin" nil "cyghere")))

参考

エクスプローラのコンテキストメニューからCygwinを起動する

エクスプローラで作業しているときに、あるフォルダをカレントディレクトリにしたCygwinプロンプトを開きたいときがあります。

Cygwinに含まれる chere というコマンドを使うことで、エクスプローラコンテキストメニューCygwinを追加することができました。

f:id:umi-uyura:20170829232155p:plain

chereをインストール

setup.exeか、gnupackには標準で含まれている apt-cyg コマンドなどを使い、 chere コマンドをインストールします。

$ apt-cyg install chere

コンテキストメニューに追加

Cygwinプロンプトのショートカットを右クリックし、「管理者として実行」します。

f:id:umi-uyura:20170829232226p:plain

起動したCygwinプロンプト内で、以下のように chere を実行します。

$ chere -i -cm1 -s bash -t mintty -e "Cygwin Here(&W)"
  • -1 を付けないと、.bashrcが読み込まれませんでした
  • -e の後ろは、コンテキストメニューに表示される文言です
  • デフォルトではアンインストーラを導入してくれますが、うまく動かなかったので、-m で不要にしました

f:id:umi-uyura:20170829232250p:plain

コンテキストメニューの削除

アンインストーラは使えませんでしたが、

$ chere -u

コンテキストメニューが削除されます。

注意点

gnupackの場合、本来は startup_cygwin.exe で起動しているが、それを使っていないので、一部gnupackでカバーしている機能が使えないっぽいです。

参考

Cygwinの$PS1で関数を使うと構文エラーが発生した

個人Mac環境では、Bashプロンプトの表示をカスタマイズしています。

※これ自体はどなたかの設定をほぼ丸パクリさせていただいたものですが、入手元を失念してしまいました

dotfiles/bash_prompt

で、同じものをgnupackのCygwinでも使おうとしたところ、何やらエラーが発生。

command substitution: 行 1: 予期しないトークン `)' 周辺に構文エラーがあります
command substitution: 行 1: `prompt_git)'

f:id:umi-uyura:20170824234735p:plain

どうやらカレントディレクトリのGitステータスをプロンプトに表示する関数でエラーが発生しているもよう。

調べていると、同じ現象に対処された方を発見。

この記事を参考に、「 $''エスケープシーケンスを評価する」の方法を使い、

PS1+="\n" # Newline

となっていた箇所を

PS1+=$'\n' # Newline

に変更したところ、動くようになりました。

変更後のgnupack用の設定は以下のような感じ。

dotfiles-gnupack/bash_prompt

新しいLinuxの教科書

新しいLinuxの教科書

Windows 10デビューしたのでgnupackとChocoletyで環境構築してみた

去年の夏に転職したのですが、気付いたらあっという間に一年経っていました。

今の会社では、仕事で使うPCをひさびさにWindowsにしたので、そのときにやった環境構築について、当時のメモを振り返りつつまとめておくことにしました。

Windowsを使うことにした理由

スマートフォンアプリ系の開発に携わるようになってからは公私共にMacに切り替えていたので、まともにWindowsを使うのは7~8年ぶりくらいです。(最後に使っていたのはWindows XP

特に開発目的ということで考えると、Unix系ツールとの親和性などもあり、使い慣れているMacの方がすぐにパフォーマンスを発揮できると思う一方で、最近のMicrosoftが提供する開発向けのサービスやツール類の充実具合も気になっていたり、さらにBash(Ubuntu) on Windowsも来るということで、ここいらで触っておくのも良いかなと思い、スイッチすることにしました。

最初に欲しいもの

新しい会社に行って、いざPCをセットアップすることになったのですが、久しぶりのWindowsということもあり、さて何を入れたら良いものかと途方にくれることに。

そこで、個人的に環境を作る際に最初に欲しいものを考えてみたところ、以下の3つでした。

  1. なにはともあれEmacs
  2. Unixコマンドラインツール
  3. ソフトウェア管理ツール

Macであれば、標準で2.はある程度サポートされていますし、3.はHomebrew & Homebrew Caskがあります。1.もHomebrewから導入できるので、かんたんに揃います。

そこで、Windowsで似たような環境を作るにはどうしたら良いのかを調べてみました。

なにはともあれEmacs、ついでにUnixコマンドラインツール=gnupack

言うほど使いこなしているわけではないのですが、かれこれ10年以上はテキスト編集をEmacs中心でやっていることもあり、個人的にこのキーバインドが使えないと作業効率が落ちるのです。

過去にWindowsを使っていた際は、Windows向けEmacsクローンであるMeadowを使っていたのですが、残念ながらMeadowは数年前に開発が止まってしまっていたので、今回改めてWindows用のEmacsを探すことに。

すると、これも昔使っていたCygwinと、Emacsの環境を一括で作ってくれる gnupack というものを発見したので、これを使ってみることにしました。

ソフトウェア管理ツール=Chocolatey

Windows系のソフトウェア類の導入ですが、Macで言うところのHomebrew Caskのようなものとして、 Chocolatey というものがあるというのを耳にしていたので、これを使ってみることにしました。

gnupackでCygwin + Emacs環境を作る

まずは、gnupackの環境を作ります。

基本的にアーカイブをダウンロードして任意の場所に展開し、いくつか必要なPATHなどを通せばそれで導入完了なので、非常に簡単でした。

以下、いくつか個人的にポイントだったところをメモ。

gnupackでCaskは扱えるのか

導入にあたり気になったのは、最近Emacsのパッケージ管理に使っている Cask が、gnupack環境でも使えるかどうか。

Caskのサイトを見たところ、WindowsでCaskを使う場合、Pythonを別途インストールする必要があるとのこと。

Windows Installation and Setup

幸い、gnupackは用途に応じて選べるように「basic」と「devel」の2種類のパッケージで提供されており、その「devel」にはPythonが含まれているので、こちらを選択すれば問題ありませんでした。

gnupack環境構築後、Cygwin上で Manual installation の手順を実施すればOK。

1点だけ、gnupackには curl が含まれていなかったので、それは apt-cyg install curl で追加しておきました。

PythonへのPATH関係も通っているので、あとはCaskでダウンロードされるファイル類を保存する場所を追加しておけば、大丈夫でした。

HOMEをどこにするか

gnupackパッケージのダウンロードとインストールは gnupack Users Guide の「使い方」に記載されているとおり。私が導入したのは 13.06-2015.11.08 というバージョンでした。

とりあえずgnupackは C:\gnupack_devel に展開。

その場合、gnupackのデフォルトでは C:\gnupack_devel\homeHOME になります。(これは設定ファイルで変更できます)

一般的に考えると、Windowsのユーザーフォルダ C:\User\<USER NAME> をHOMEにした方が違和感が少ないのかな、と思いつつ、何か副作用があるかもしれないので、まずはデフォルトの設定で運用してみることにしました。

.emacsか、customizeか

gnupack Emacsの初期設定は <gnupack root>\home\.emacs.d にあります。

個人Macで使っている、 これまで丹念に育ててきた.emacsもGitHubにある のですが、gnupackはある程度設定をしてくれているようだったので、それとは別に管理することにしました。

umi-uyura/dot.emacs.d_gnupack

別にしたのは、MacWindowsで細部の設定が変わりそうという点と、今まであまり使っていなかったcustomizeを積極的に使ってみようと思ったからです。(正直に言えば、gnupackのinit.elに欲しい設定をひとつひとつ移植していくのが面倒だったからですが…)

また、gnupackはpackage.elも導入済なので、 list-packages で必要なライブラリもすぐに追加することができました。

小指対策

Emacs使いと言えば左手小指を駆使することになるので、これも昔お世話になったCtrl2capを導入して、Caps LockキーをControlに置き換えておきます。

Ctrl2cap

Sysinternalsとか使うの、超ひさびさ。昔はMicrosoft管轄ではなかったんですよねー。

Process ExplorerとかProcess Monitorとか、お世話になっていました。

Chocolatey

次は、Macで言うところのHomebrew Cask的なものであるChocolatey。

Windowsにもこんなのができていたのかーと思いつつ使ってみています。

若干不安定(インストールに失敗するものがある)だったり、なかなか更新されないパッケージがあったりする点がありますが、ある程度は欲しいソフトウェアが自動で入れられるので、これも便利ですね。

Chocotetyにあっても、バージョンが最新かどうか確認してみて、新しいものに追従できていなそうなものは手動で導入するようにしました。

キーバインド

Macに移行したときは半角/全角切り替えキーがなくて戸惑いましたが、Macから返ってくると、もはやそんなキーがあったことを忘れているくらい、変換/無変換キーに指が慣れてしまっていました。

そこで以下の記事を参考に、Macキーバインドに変更。

Windowsの変換・無変換キーでIMEの有効無効をMac風に操作する | karakaram-blog

おわり

と、(もう一年くらい前ですけど)最初の環境構築はこんな感じでした。

今のところベースはほとんど変わっていないので、再セットアップをすることになっても、とりあえずこのやり方でいけそう。

まあ、次はできればBash on Windows中心に切り替えたいところですが。

Xperia Z3の機種変更でタップ&ゴーを使ってデータ移行してみた

メインで使っているスマートフォンであるXperia Z3、2014年の秋ごろに機種変更したものですが、1年くらいたったころからタッチディスプレイの反応が悪くなってきていたのですが、いよいよ操作もおぼつかない状態になってきたので、先日とうとう修理に出すことに。

修理に出している間は代替機を借りていたのですが、そのときに現端末のデータを移行するにあたり、Android 5.0から搭載されたタップ&ゴーという機能を初めて使ってみたところ、かなり便利だったので、感動を記しておくことにしました。

タップ&ゴー

タップ&ゴーを使うには、移行先の端末がAndroid 5.0以降である必要はありますが、移行元はNFCが搭載されていれば4.0以降の端末で使えるそうです。

そう言えばXperia Z3も最初に機種変更した当初は4.4だったので、その前に使っていたGALAXY S3から移行するときには、タップ&ゴーは使えなかったのでした。

移行できる情報

タップ&ゴーで移行できる情報は以下のようなもの。

  • Googleアカウント
  • インストールしていたアプリ
  • アプリのデータ
  • Wi-Fiパスワード

このうち、アプリのデータというのはどこまで復元されているのかはよくわかりませんでした。

移行のやり方

移行先端末のセットアップを始めるとタップ&ゴーの案内が出てくるので、移行元端末のNFCを有効にした状態で2つの端末を背中合わせにすると、確認音が鳴って、移行先端末で処理が開始されます。

f:id:umi-uyura:20160620232134j:plain

うまくいかないときは、設定→その他の設定→NFC/おサイフケータイ設定へ進んで、 Reader/Writer,P2PAndroidビーム がONになっているか確認すると良いようです。

f:id:umi-uyura:20160620232145p:plain

あとは画面の処理に従っていくだけですが、ここで移行元で使っていたGoogleアカウントを移行すると、その後、インストールしていたアプリが自動的に移行先の端末でもインストールされ始めました。

※なお、自動的にインストールが開始されてしまうので、モバイル通信ではなく、Wi-Fi環境下で実施するのが良いと思います。

また、端末セットアップを開始した直後は(まだ移行していないので)自宅Wi-Fiに明示的に接続しましたが、タップ&ゴーで移行が終わったあとは、会社のWi-Fiなど、以前に使ったことがあるアクセスポイントには、パスワードを入れなおすこともなく繋がりました。

そういえば、アカウントには2段階認証をつけていましたが、認証コードは要求されませんでした。

注意点

私の場合、プライベート用や開発用などでGoogleアカウントを複数使っているのですが、初めそれらを一括して移行しようとしたところ、アプリの復元などがうまく動きませんでした。

おそらく、タップ&ゴーでアカウントを移行するときに、最初に出てきたアカウントがメインということで扱われてしまうようですが、それが普段アプリのインストールなどに使っているのが別のアカウントであった場合、アプリの復元がおこなわれないようです。

移行対象のアカウントを選択するときにアルファベット順に出てくるのですが、そのせいでサブのアカウントが最初に出てきてしまい、そのまま進めてしまうと、このような状況になります。

そこで、タップ&ゴーで移行するアカウントはメインで使っているもののみにして、他のアカウントはセットアップ完了後に追加するようにしたところ、うまくアプリも復元されました。

感想

修理に出す前は、初めは移行が1回で済むリフレッシュ品へ交換しようと思っていました。というのも、その場合は修理している間に貸し出される代替機へアカウントを移行して、修理が終わったらまた元の端末に移行しなければならないので、二度手間だなーと思ったからです。

ただリフレッシュ品を申し込もうとしたところ、Xperia Z3の在庫がないため、Z4になってしまうとのことでした。

機種としては新しいし、スペック自体は上がるものの、逆に高性能なCPUの影響なのか、発熱問題があったりバッテリー駆動時間が短いらしいという噂を聞いていたので、悩んだ末に修理に出すことにしたのですが、この場合は代替機との間でデータ移行を2回もやらなければいけないのが非常に面倒に思っていました。

ですがタップ&ゴーのおかげで、一番面倒くさい必要なアプリの一括インストールが自動化されたので、移行が非常に楽になりました。

個々のアプリの設定をやりなおすのも面倒ですが、まあ必要になったときに随時やるようにしていけば、なんとかなりそうです。

参考

黒帯エンジニアが教えるプロの技術 Android開発の教科書 (ヤフー黒帯シリーズ)

黒帯エンジニアが教えるプロの技術 Android開発の教科書 (ヤフー黒帯シリーズ)