kondoumh のブログ

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

Visual Studio で C# の REPL - C# Interactive - を使う

Java 10 の JShell 使ってて Java が可愛く思えてきたので、C# にも REPL ないのかなーと見てみたら CSI というのがありました。

C# Interactive Walkthrough · dotnet/roslyn Wiki · GitHub

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\Roslyn\csi.exe が本体のようです。Visual Studio 2015 から追加されたようです。知りませんでした。

開発者コマンドプロンプトから csi と叩けば使えますが、コマンドプロンプトで C# のコード書くのはちょっときびしいので Visual Studio で

表示 -> その他のウィンドウ -> C# インタラクティブ

でリッチなシェルが起動します*1。プロジェクトを開いてない状態でも使えます。

f:id:kondoumh:20180402173118p:plain

IntelliSense も効きますしコードが正しく評価されると整形もしてくれます。裏で JIT でコンパイルしてるっぽく、ちょっともっさり感ありますが、なかなか素敵なツールです。

f:id:kondoumh:20180402173137p:plain

このように LINQ の式を試す時など特に便利そうです。昔から LINQPad というツールがあって、LINQ to Entitis の Playground として使えますが、CSI は Visual Studio に付属しているので気軽に使えますし LINQ 以外の機能も試せます。

macOS や Linux でも使える .NET Core の環境にはまだ、CSI がポーティングされていないようで GitHub に Issue がありました。

github.com

IntelliSense 付きの CSI シェルが VS Code の統合ターミナルで動くといいですね。Language Server Protocol で拡張機能を作る感じかな。

サーバー プロトコルの言語拡張機能を追加する | Microsoft Docs

*1:F# Interactive というのもありますね。

IntelliJ IDEA で Java 10 のローカル変数型推論を有効化する

Java 10 がリリースされ、ローカル変数型推論が使えるようになったということで、環境構築してみました。 業務アプリではクラス名が長くなりがちなので、変数の初期化で右辺から型が明確な場合は積極的に使うとコードが簡潔になる効果があります。

JDK は以下のページからダウンロードできます。

Java SE - Downloads | Oracle Technology Network | Oracle

REPL である JShell が標準装備されました。IDE を開かなくても 手軽に API を試せたりするのがいいですね。

f:id:kondoumh:20180329233627p:plain

ローカル変数型推論ちゃんと使えました。JShell では単一ステートメントのセミコロンは省略できますし Java なのに可愛く思えるから不思議です。

IntelliJ IDEA も 2018年最初のメジャーアップデート 2018.1 がリリースされたので、早速更新。

f:id:kondoumh:20180329235350p:plain

File -> Project Structure の Platform Settings -> SDKs で JDK を指定します。macOS の場合は /Library/Java/JavaVirtualMachines/jdk-10.jdk/Contents/Home/ を指定します。

f:id:kondoumh:20180329235715p:plain

Project Settings -> Project の Project SDK: で登録した 10 (java version "10") を選択、Project language level: で 10 - Local variable type inference を選択します。

f:id:kondoumh:20180330000202p:plain

これで、ローカル変数で var を使ったコードがコンパイルできるようになります。

f:id:kondoumh:20180330000321p:plain

(追記)

IntelliJ IDEA 上でも、JShell を使えます。

Tools -> JShell Console...

で起動します。jshell_console_1.snippet にコード片を入力し、⌘ + Return で JShell shell_console_1 に実行結果が出力されます。スニペットウィンドウ上での選択範囲だけを実行させることもできます。

f:id:kondoumh:20180403063009p:plain

コードアシスト機能も発動しますし、JRE で JDK 10 を選択していれば、ローカル変数型推論も有効になります*1

(追記終わり)

Java 界隈も半年ごとのメジャーリリースへとリリースサイクルが変わったり、Java EE が Jakarta EE になったりと色々動き出てきました。プロダクション投入の本命は LTS が適用される Java 11 になると思われます。

Oracle Java SE サポート・ロードマップ

Java 1.2 ぐらいから業務で使ってるけど、もう20年経つんですね。。

*1:スニペットウィンドウではなぜかエラーっぽい表示ですが

Amazon Echo Dot を購入

各社のスマートスピーカーが出揃ってそろそろ Google Home か Amazon Echo 買ってもいいかなと思ってました。Nexus 6P の Google Assistant にもハンズフリーでアンロックして天気を教えてもらったりしていますが、Voice UI 専用機があってもよいかなと。

去年まで Google Play Music 使ってて、今年から Prime 会員なら少し安くなる Amazon Music Unlimited にスイッチしたこともあり Amazon Echo に決定。購入招待申し込みして3日ほどで招待メールが。コンパクトな Echo Dot を注文。翌日来たので招待申し込んでから4日ぐらいで届いたことに。スマホの Alexa アプリで設定自体はすぐに完了(WiFi の設定方法が若干分かりづらかった)。

f:id:kondoumh:20180317172259j:plain

Amazon Music 端末としては非常に快適です。Radiko 端末としてもいい感じ。それぞれ専用端末と言っても差し支えないレベル。

目覚まし時計としては、寝る前にタイマーを設定するだけで午前・午後まで指定しなければいけないというシンプルさですが便利に使ってます。これまでは iPad の Siri に起こしてもらっていましたが、寝室にデバイスを持ち込まないといけないのが若干面倒でした。

いくつかサードパーティのスキルも有効化してみましたが、まだ常用してるものはありません。

やはり Alexa には偏在しててほしいです。

これができると Podcast の消化が捗る気がするのですが(寝落ちするだけか)。

ホームページを HTTPS 化

最近、Chrome や Firefox を使っているとアドレスバーの左に HTTPS 対応情報が目立つようになってきており、HTTPS 化への圧を感じます。そして、Chrome 68 からは、全ての 非 HTTPS ページに「保護されていない通信 (Not secure) 」 という警告が出るようになるそうです (現バージョン 64 でもフォーム入力画面では出ます)。

security.googleblog.com

kondoumh.com のホームページを設置しているさくらインターネットでは去年から Let's Encrypt による無料 SSL サーバー証明書が使えるようにしてくれています。

対応しなきゃと思ってましたが、年を越してはや2月下旬。ようやく本日作業しました。証明書の発行自体はさくらインターネットのコントロールパネルからポチっとやるだけ。証明書の更新もサービス側にお任せできます。http -> https のリダイレクト設定は .htaccess ファイルを手編集。後はページ内の HTTP リンク (主に YouTube や Amazon ウィジェット) を地道にHTTPS リンクに差し替えて*1完了。

kondoumh.com

ついでに独自ドメインで運用している Tumblr も HTTPS 設定しました。

reblog.kondoumh.com

はてなブログはサービス側の HTTPS 対応が完了して独自ドメインでの対応方法が分かってから考えたいと思います。

2018.6.20 追記) はてなブログも独自ドメインで HTTPS 配信に対応されましたので、移行しました。 blog.kondoumh.com

*1:画像 の URL が HTTPS になっていると Chrome の DevTools で Mixed content の警告が出ます。

iEdit 2.30 リリース

f:id:kondoumh:20160410114137p:plain

約3年!!放置しておりました。ご無沙汰してました。

今回、機能追加やバグ修正はありません。

HiDPI 環境対応

最近 HiDPI をサポートした PC やタブレットが増えて、MacBook の Retina ディスプレイさながらテキストやアイコンなどを高い画素密度で美しく表示できる環境が普及しています。残念ながら iEdit を HiDPI 環境で動かすと、ツールバーのボタンや各ビューのスケールが縮小されてとても使えない状態になってしまいます。

f:id:kondoumh:20180212120614p:plain

本格的に対応するとなると、ウィンドウ生成周りや描画周り (特にダイアグラム部分) のレガシーなコードを書き直す必要がありますが、全く気乗りしない作業です。それで放置期間が長引いてしまいました。

今回、HiDPI を無視するビルドオプションの存在を知ったのがリリースのきっかけでした。このオプションでビルドしたバイナリを実行すると OS は「こいつ HiDPI って知らずに起動してるじゃん」と気付いて、どんな高精細のディスプレイ上でも、昔ながらの SVGA 的なサイズ感 *1 に調整してくれます。HiDPI じゃない環境では従来通り起動されます。実は起動用アイコンのプロパティで互換性の設定をすれば同じようなことができるのですが、利用者の手間が増えてしまうのと、必ずしも有効になるわけではなかったので、ビルドオプションで対応することにしました*2

f:id:kondoumh:20180212120653p:plain

ツールバーは16色のまま、ダイヤグラムは GPU によるレンダリングにも対応しないため*3、古臭い感が抜けませんが、まあベースが古いので・・。しかし、Microsoft はレガシー Win32 アプリの面倒をよく見てくれて助かります*4

Windows 10 サポート

前回リリース時はまだ Windows 8 時代で Windows 10 は Insider Preview でしたが、今や Windows 7 に拮抗するシェアを獲得しています。私も会社のラップトップが Windows 7 ですが Windows 10 オンリーになる日もそう遠くなさそうです*5。今回は Windows 7 でも動作確認してるので、おそらく 8 / 8.1 でも動作するのではないかと思います 。

Windows 10 サポートでやったことは最新の Visual C++ 2017 (内部バージョン 14.1) と Windows SDK (10.0.14393.0) でビルドしたこと、バージョン判定ロジックを修正したことぐらいです。Visual Studio 2017 でインストーラもガラリと変ってしまい、環境構築やプロジェクトの移行方法がよく分からなかったことも放置期間が長引いた原因になりました。

今後

ということで、ビルドし直しただけに近いリリースですが、マイナーバージョンを1つ上げました。 今後どの程度更新するか謎ですが、

  • コードベースの大幅変更を予定しない
  • 開発環境を常に最新版に更新して保守用環境 = 日常使いの環境にしておく

という状態になったので気楽に更新できる気がしています。

*1:96DPI のディスプレイに表示した感じです。

*2:開発機が MacBook なので VMware Fusion 上の 仮想マシン (Windows 10 Fall Creators Update) で HiDPI を有効にして確認していますが、このバージョンではスケーリングの描画がかなり改善されたみたいなので、初期バージョンの Windows 10 では表示のされ方が異なるかもしれません。

*3:GPU を活かすべく Direct 2D も試してましたがそのコードも revert しました。

*4:なんとストアに出すためのオプションまであります。Windows は元来下位互換性を重視するプラットフォームですけどね。ディベロッパーが UWP アプリをガンガン開発してくれないからかもしれませんが。

*5:Update による違いがどのぐらい顕著になっていくのかは今のところ謎です。Windows 10 も古いビルドはサポート終了になっていたりします。

個人開発用 VPS を捨て Cloud IDE に移行する

2年近く VPS を維持してきました (Ubuntu 16.04 LTS 32bit 2GB RAM : 980yen/month)。

  1. Node.js で CLI ツール作る
  2. Web API や Web UI のお試しコードを書く
  3. 未知の言語のコンパイラや REPL を使ってみる

などの用途に。

昨年末 Codenvy を触ってみて、もう VPS 常時起動なんかやめて必要時に Cloud IDE 使えばいいんじゃないかと思い始めました。

blog.kondoumh.com

未知の言語用環境構築は依存ライブラリのバージョンとかでハマることも多く自由度の高い VPS の方が重宝します*1が、Node.js や Web 開発は標準的な構成で使うためクラウドで提供されている環境で十分な気がします。

有象無象の Cloud IDE から今回は、新興の Codenvy、老舗の Codeanywhere、昨年登場した AWS Cloud9 の3つを無料枠の範囲で試してみました。

Node.js の CLI ツールや Web API の簡単なクライアント画面のコードを Bitbucket のリポジトリに置いて、

  • 環境構築
  • ソースコードの取得
  • ソースコードの修正
  • 実行確認
  • ソースコードのコミット

という小さな開発プロセスを回してみました。

結果表を先に示します。以下の比較はあくまで無料の範囲内 (AWS 以外) ということにご注意ください。

Codenvy Codeanywhere AWS Cloud9
ターミナル
VCS 連携
コンテナ Docker OpenVZ EC2
コンテナ : Git リポジトリ 1 : 1 1 : 1 1 : n
PaaS 連携 Heroku DigitalOcean AWS
プロジェクトテンプレート ×
ライブラリ・ツールの追加
パッケージ管理システム APT APT Yum
独立タブによるプレビュー
インスタンスの休止 10分 ? 任意
作業フォルダの維持 ×
iOS / Android アプリ × ×
iPad での作業

なお コードエディタ の詳細な機能比較はやっておらず、ファーストインプレッションのみです。

Codenvy

codenvy.io

Java / C++ / C# / Python / PHP / Node.js などのプラットフォームを選択してプロジェクトを構築できます。Node.js のテンプレートを選んでスタートしました。

f:id:kondoumh:20180205223919p:plain

ターミナル

Docker コンテナに ssh してターミナルが利用できます。コンソールで日本語も表示 OK です。

BitBucket 連携

git clone は Bitbucket の OAuth 認証で行けました。コンテナには docker が使われており、git のリポジトリ単位でコンテナがデプロイされます。

/projects 配下に一つだけ git リポジトリが取得されている状態になります。

git config で user.name や user.mail を設定していてもなぜか git commit 時にエラーになってしまいます。

git config --global -l してもちゃんと設定されてるのに?? と思って、Profile -> Preferences を見ると Git -> Committer の設定画面で Name: と Email: を設定する必要がありました。ターミナルで .gitconfig 設定してもダメみたいです。

ツール・ライブラリのインストール

Node.js / npm はデフォルトで導入されています。 sudo apt-get install xxx で パッケージをインストールできました(パスワード不要)。Debian 系のようです。

コードエディタ

Eclipse Che でモダンで高機能な感じです。

実行確認

タスクランナーには Gulp を使っていますが、Node.js 環境だからか普通に実行できました。

VPS では gulp-webserver で HTML や JavaScript のアセットの更新を Watch して LiveReload してました。localhost ではなく 0.0.0.0 などのアドレスで起動するという方法でローカルのブラウザから確認していました。Docker のコンテナは 10.xx.xx.xx のようなローカル IP アドレスしか見えないため、この方法は使えません。

Codenvy の IDE では、HTML ファイルをプレビューする機能があるのでそれを使うことは可能です。ブラウザの独立したタブとして起動するので、DevTools で JavaScript のデバッグをすることもできます。LiveReload のような手放し感がないので今ひとつですが。

インスタンスの休止

無料枠だと10分でタイムアウトするので、Web で調べ物をしているうちにストップしていたりします。インストールしたツール類は残っていますが、node_modules とか作業ディレクトリは毎回クリーンされてしまうので、毎回 npm install が必要です。コードベースが大きいとツラいですね。もしかしたらオプションがあるのかもしれませんが。

iPad での作業

iPad の Chrome / Safari でも Codenvy はそこそこ動きますが、ターミナルでコマンドヒストリが呼び出せないのと、ソフトウェアキーボードでは Ctrl キーが打てないのがツラい感じでした。物理キーボードでも Ctrl キーやカーソルキーを認識しません。コマンドをがしがし打てないですが、なんとかなるレベルではあります。

その他

Heroku 連携機能があって、ブラウザだけで開発とデプロイが可能です。

Codeanywhere

codeanywhere.com

老舗と言っていい Cloud IDE で、iPad / Android のアプリまで提供されているのがすごいです。Codenvy のようなターゲットプラットフォーム毎のテンプレートのようなものはありません。

f:id:kondoumh:20180205223945p:plain

ターミナル

普通に使えますが、日本語は文字化けしました。あと、プロジェクトのアイコンを右クリックして出現するスペシャルなコンテキストメニューからしか起動できないため、iPad では起動できません(これが一番痛い)

BitBucket 連携

Codenvy と同様、コンテナに一つの Git リポジトリが展開されます。Git の環境は git コマンドで通常通り設定可能です。

ツール・ライブラリのインストール

sudo apt-get で パスワードなしでインストールできました。

コードエディタ

Eclipse Che より機能は劣る感じがしますが、動作が軽く Horizontal / Vertical に画面を分割できるし、中々使いやすい感じです。VS Code や Atom のように JSON を編集して設定します。

実行確認

gulp タスクの実行、ページのプレビューなどは Codenvy と同様に可能です。

インスタンスの休止

一定時間でリサイクルされますが、node_modules や作業フォルダはそのまま残っていますので、毎回、npm install とかする必要はありません。コンテナのロゴなどは特に表示されませんが、公式サイトによれば、OpenVZ が使われているようです。

iPad での作業

iPad の Chrome / Safari でもほぼデスクトップと同様に使えますが、iOS では、上記のようにターミナルの起動ができません。プレビューもスペシャルなコンテキストメニューで行うのですが、iPad ではファイル単位で呼び出せません。

専用アプリを使うとターミナルやプレビューは可能ですが、フルスクリーン画面しかなく IDE のような使い勝手ではありません。Split View にも未対応で、iPad の機能を活かしきれていない感じです。アプリで物理キーボード使っても Ctrl キーとか効きません。この辺はもう少し頑張ってほしいところです。ていうか、アプリ頑張るのではなく Web IDE でスペシャルなコンテキストメニューじゃなく通常のメニューから使えるようにしてくれるだけでいいのですが・・・。

現状、アプリを使わざるを得ず、IDE のメリットが享受できない感じがあります。

その他

DigitalOcean と連携できる模様です。

IDE だけなら Codenvy の方が使いやすい感じですが、作業フォルダが残るところとか、モバイルアプリがあったりと普段使いなら Codeanywhere の方が現実的な気がします。

AWS Cloud9

aws.amazon.com

AWS に買収された Cloud IDE。サーバーレスアーキテクチャな Lambda の開発プラットフォームとして昨年末の AWS re:invent で発表されました。オリジナルの Cloud9 もありますが、Lambda にも興味ありということで、この際 AWS アカウントを作成し IMA コンソールでユーザを追加。

Codenvy 同様プラットフォームごとのテンプレートが用意されています。

f:id:kondoumh:20180205224151p:plain

ターミナル

普通に使えます。

BitBucket 連携

Codenvy / Codeanywhere は Git リポジトリ単位のプロジェクトでしたが、Cloud9 のコンテナは EC2 そのものです。ですので、一つのコンテナに複数のプロジェクトを構築できます。

ツール・ライブラリのインストール

node と npm は最初から入ってました。

sudo apt-get でパッケージをインストールしようとしたらエラーが出て yum 使えと popup が出ました。Redhat 系のようですね。 sudo yum install xx で パスワードなしで導入できました。

コードエディタ

Ace Editor が使われており、モダンテキストエディタそのものです。Sublime Mode などのプリセットが用意されています。

実行確認

gulp タスクは当然実行可能。プレビューは IDE 内のタブとして起動します。そのままでは DevTools でデバッグできませんが、アドレスバーの横に Pop Out Into New Window というツールチップの出るボタンがあり、クリックすると新しいタブとして開くことができます。

インスタンスの休止

課金怖いので30分で休止するようにしています。作業フォルダや node_modules がリサイクルされることはありません。

iPad での作業

ターミナルでの Ctrl キーはやはり入力できませんでした。コマンドヒストリは使えます。なんとか作業はできるレベルだと思います。

その他

EC2 の VPS を WebUI で使える感じです。Lambda の開発も試してみたいところです。 ちなみに、Cloud9 自体は GWT*2 で作られているようです。

まとめ

ソースコードが、GitHub や BitBucket にあればすぐに取得して開発・実行環境を構築できる Cloud IDE。それぞれ、テンプレートからプロジェクトを生成できたり、PaaS と連携できたり、iOS / Android 端末でも使えたり・・。当然ローカルの開発環境の方が生産性は格段にいいですが環境構築が簡単で iPad とか Chromebook さえあればどこでも開発できるユビキタスな感じは Cloud IDE の魅力ですね。 VPS は解約しました。iPad からも Prompt 2 とかを削除。 普段使いで PC では Codenvy、iPad では Codeanywhere 、AWS の機能を使いたい時は Cloud9 のように使い分けようかと思います。

*1:Docker 使えばいい気がします。

*2:Google Web Toolkit

VS Code の統合ターミナルで Tig が標準装備された Git for Windows を使う

タイトル通りです。

以前、VS Code の統合ターミナルで BoW(Bash on Ubuntu on Windows) を指定して macOS に近づいた! と書いてました。

blog.kondoumh.com

macOS や Linux では Git リポジトリの Text-mode interface である Tig を愛用しています。

github.com

BoW の時は Ubuntu に導入した Tig がそのまま統合ターミナルで動いたので喜んでたのですが、会社マシンはいまだに Windows 7 で BoW は使えませんし、自宅 MacBook の仮想マシンの Windows 10 にはわざわざ BoW とか入れてません*1。Gygwin とか今更入れたくないしなーと時々思い出したように Windows 版のバイナリ探してました。GitHub にも Windows build ないの〜? という Issue が立ってました。

github.com

先日久々にチェックしたら去年の9月に作者の人が「Tig が Git for Windows に同梱されたよ!」ってリリースノートのリンクを貼ってました。

Release Git for Windows 2.14.2 · git-for-windows/git · GitHub

Git for Windows は使ってますが、導入日付を見ると 2016年。そこで最新版をインストールしたら、ちゃんと Tig が使えました。

Git for Windows は MSYS2 を統合しています。MSYS2 は MinGW を補完する MSYS の後継プロジェクト・・とまあ Windows に Unix のシェルとツールチェインを提供する OSS で Cygwin の遠い親戚です。Cygwin よりも Windows との親和性を考慮して開発されています。

MSYS2 homepage

なので Git for Windows のシェル環境を VS Code の統合ターミナルで使えばいいじゃないのと思って設定してみました。

"http://terminal.integrated.shell.windows ": "C:\\Program Files\\Git\\bin\\bash.exe"

普通に使えて統合ターミナル内で Tig も動きました。MSYS2 のシェルのオーバーヘッドがあるためか、ターミナルの起動はややもたつきますが、起動してしまえば問題ありません。

f:id:kondoumh:20180125121712p:plain

MSYS2 ベースなので、Windows のシェルとの相互運用がよくできています。BoW だと Linux に Windows のファイルシステムがマウントされているので、/mnt/c/Users/kondoumh のようなパスになるのですが、Git for Windows だと /c/Users/kondoumh とマウントを意識させない感じのパスが使えます。Windows 標準の cmd.exe にコマンド実行を委譲してくれるので start . でカレントフォルダでエクスプローラを起動してくれますし、notepad でメモ帳が起動します。

Git と Node.js のエコシステムが普通に使えるので、VS Code のシェルとしては非常に馴染みます。Windows 10 を使っていても Linux のネイティブ開発でない限り、BoW よりこちらの方がよさそうです。

ということで、VS Code + Git for Windows (・∀・)イイ!! という話でした。

*1:統合ターミナルで BoW の記事投稿時は BootCamp で Windows 10 を使ってました