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

kondoumh のブログ

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

2016 ふりかえり

今年も残り僅かとなりました。恒例のふりかえりエントリーです。

Job

フレームワーク開発 (.NET)

前半は、昨年から継続して .NET の業務アプリフレームワーク開発。機能開発は昨年暮れまでにほぼ完了しており、年明けから結合テストの傍らリファクタリング漬けの日々 (コード凍結が中々できず・・) 。性能チューニングやメモリリークの特定と修正、アプリ開発開始に伴う追加要望対応とバグフィクス、テストドライバーの改善、アプリの結合試験環境作成や保守用ドキュメント作成・・とフル回転。怒涛のプロジェクト進行によるハードワークで何回かバーンアウトしてました。

多くのコードを設計書から自動生成し、標準で縛り、開発者がロジックを書く部分を極力限定するという、いい意味で統制のとれたアーキテクチャでした (try catch も書かせません)。

性能チューニングでは、起動処理の並列化や通信の圧縮といった通常の対応はもちろん、クラスを JIT ではなく CompilerServices でプリコンパイルしておくなど、打てる手は打ち尽くすという感じでした。RDB の1000列のテーブルの更新を数秒以内に終わらせることが求められました。そんな DB 設計を許容するということ自体がありえないと思いましたが、兎にも角にもフレームワークとしては非機能要件を満たしたのでした。

フレームワーク開発が本格化してから約10か月、採用された UI コンポーネントの品質が低かったり、仕様追加が激しかったり、コードが複雑化して保守が難しくなったりといろいろと大変でしたが、経験豊かな力量ある .NET エンジニアがフルパワーで戦ってくれたおかげでなんとか乗り切れました。

.NET による開発の知見も色々と得られました。リリースに関しても、Jenkins の .NET 系プラグインや PowerShell プラグインを駆使してかなりのオートメーションを実現できました。

6月で無事卒業。

フレームワーク開発 (Java EE)

7月からは一転 Java EE の業務アプリフレームワーク開発現場に着任。ここではプロダクトコードはメンバーに任せ、仕様調整、設計レビュー・コードレビュー、チケット管理、各種自動化をやっています。

Java だと Spring や Hibernate などデファクト技術で構築することが多いので、ド標準の Java EE (JSF / CDI / JPA) には正直馴染みが薄いです。情報も少ないですし。メンバーはライブラリの実装までみて問題解決できるレベルなので開発自体はさしたる問題もなく進んでいます。やはりうちは Java 中心の技術者集団なのだと改めて思いました。

Java 8 はお初です。Lambda / (Parallel)Stream / Optional など Functional な言語機能が取り込まれて、フレームワークのコードもかなり様変わりしてます。

blog.kondoumh.com

エンプラシステムのアーキテクチャ構築・フレームワーク開発に携わって長いんですけど、お客様の事情を理解してモノを作るというところ(要約すると要件定義)で毎回苦労してます。このプロジェクトでは、まだアプリの開発は始まっていません。先は長そうです。

Writings

業務用

会社の宣伝活動も兼ねて ITmedia エンタープライズで連載させていただきました。

blog.kondoumh.com

モデリングの話は最近少ないので、一周回って新鮮に受け止められたのではないかと思います。自分としては最終回で UI の設計プロセスについて語れたのがよかったです。

はてなブログ

はてなダイアリー時代から10年以上続けてきて、今年はアイキャッチ画像も気を使うようになりましたし、広告を消したいという動機ではてなブログ Pro にアップグレード、サブドメイン使うようにしてみました。結果、更新のモチベーションに繋がっている気がします。iPad ネタが多かったですね。今後も引き続きソフトウェアやガジェットについて書いていくんだろうと思います。

Qiita

.NET の小ネタを2件ほど投稿してました。

qiita.com

qiita.com

Personal Development

iEdit

今年は初めてリリース0回。2年近く放置したので窓の杜からも消えました・・。シナリオ作ってる人がいまだに使ってくれてるようなので Electron と d3.js あたりを使ってクロスプラットフォームアプリへと式年遷宮したい気持ちはあります。

社内アプリ

社内業務支援アプリを構想中。プロトタイプの作成に取りかかっています。

昔も稼働が空いた時、同僚と SFA アプリを作りました。しかし営業支援ツールなのに VPN でしか使えず、保守工数も取れず、定着化・改善のサイクルに持って行けませんでした。今回はモバイルファースト・クラウドファーストなアプリにして改善サイクルを回したいです。お客様に DevOps の話してる時に自分達でやってないと説得力ないですしね。運用もやるつもりです。

サーバーサイドは Java 技術者が多い社内事情を考慮して Spring Boot。DB はとりあえず H2 で良いかなと。ドメインモデルを Astah で作りました。RESTFul API の設計を Swagger 使ってやるべく環境構築。全文検索も Solr とかで実装したいところ。

UI は React / Mithril / Riot.js あたりで迷っています。いずれにしても SPA で行くつもりです。

Gadgets

持ってるものは去年とさほど変わってなくて、Android Wear の時計買ったのと iPad リニューアルぐらいです。

Moto 360 2nd gen

時計 & 活動量計 & 通知デバイスとしてすっかり生活に溶け込みました。

blog.kondoumh.com

スマートウォッチの市場はシュリンクしていて未来はないという予測も出ています。時計をつける習慣がなく、スマートウォッチだから使い始めた自分のような人も多いと思うのですが。

jp.techcrunch.com

市場のシュリンクを裏付けるかのように年末モトローラのスマートウォッチ撤退のニュースが。

forbesjapan.com

でも Google はまだやる気のようです。

www.forbes.com

Android Wear 2.0 は単独でアプリのインストールができるようです。スマホのコンパニオンデバイスではなく、独立したガジェットとして発展していくという未来はあるのでしょうか。

iPad Air 2 Cellular

3年間使った Wi-Fi 版 Air とお別れして、Cellular 版 Air 2 に乗り換えました。

blog.kondoumh.com

通勤のお供に漫画リーダー、Ingress 端末、コーディング環境と幅広く活躍してくれます。MacBook Pro を持ち歩くときのテザリング端末としても優秀。iOS の進化は引き続き見守っていこうと思っています。

Nexus 6P

Nexus 6P は引き続き愛用してます。

blog.kondoumh.com

この記事を書いた時はまだ iPad Air 2 を入手しておらず、生産活動にも活用しようとしてました。

夏に Nougat がリリースされました。目玉機能の一つであるマルチウィンドウは日頃全く使わないです。Android タブレットだったら使いそうですね。

その後 Pixel が発表され、Android 7.1.1 がリリース。UI がかなりブラッシュアップされた感じです。ホーム画面でアプリアイコンを長押しすると機能のショートカットメニューが出るようになりました。iOS の 3D Touch 的な機能ですが、これも今の所全く使ってないですねえ。

多くのサービスを Google に依存しているため利便性が高い Nexus ですが、Pixel の登場でディスコンになってしまいました。Pixel の日本発売は未定ですが、FeliCa 使える iPhone に回帰する可能性もありますね。iOS も Android も差がなくなっているし Android のフラグシップモデルと iPhone の価格差も縮まっているし。iOS で不便なのは Chrome をデフォルトブラウザにできないことぐらいなので。

MacBook Pro

13-inch Early 2015 を使い続けています。macOS Sierra は未導入です。今年のモデルチェンジ、Touch Bar はともかく USB-C オンリーとかマシンパワーがアップしてないとか信者じゃないと厳しそう。あと2年ぐらいは今のモデルでいけそうな気してます。

VR とか AI で GPU パワーが使いたいならゲーミング PC がよさそうですね。ツクモが Razer Blade 扱い始めてます。スリムなゲーミングノートよいかも。

getnews.jp

VR グラス

Cardboard のヘッドセット買いました。スマホの装着がけっこう面倒 (留め金がキツめで Nexus 6P に傷がつきそう) なので数回使って埃かぶってます。

blog.kondoumh.com

Android 7.1.1 で Nexus 6P も Daydream 対応になったし日本でも発売してほしいですね。スマホの装着が楽そうでリモコンもついてるし OS がサポートしてるのは大きいと思います。

vr.google.com

Oculus Rift や PlayStation VR が発売され VR 元年と話題になりました。パーソナルコンピューティングを変えるポテンシャルを持ちつつあるようです。

SFマガジン 2016年 12 月号 [雑誌]

SFマガジン 2016年 12 月号 [雑誌]

Fire TV Stick

Amazon プライムに入りました。

MacBook や iPad でプライムビデオ観てましたが TV CM で音声認識リモコン見て買ってしまいました。Chromecast だと対応してないというのもありました。

http://stock.kondoumh.com/post/153171945022/amazon-fire-tv-stick
stock.kondoumh.com

Magic Trackpad 2

キーボードもマウスもパッドも Magic シリーズで揃えてしまいました。

blog.kondoumh.com

Software

Microsoft プロダクトの話題が多かったですね。

Bash On Ubuntu On Windows

Windows 10 Anniversary Update の目玉です。 インストールしてブログ書いただけで、本格活用には至っていません。普段はやはり macOS です。

blog.kondoumh.com

Visual Studio Code

統合ターミナルも入ってきて完成度が高くなりコードエディタの決定版になりました。

blog.kondoumh.com

Visual Studio for Mac

とうとう macOS でも使えるようになった Visual Studio (というか Xamarin Studio ですが)。

blog.kondoumh.com

今年は仕事で Xamarin にも少々関わりました。Windows の Visual Studio 2015 での Xamarin 開発は環境構築の敷居が (ハードウェア的に) 高い印象でしたが Mac 版はネイティブな Xamarin Studio ベースだけあってスムーズですね。ASP.NET Core も Java EE 並みの存在になっていくかもしれません。NET Standard の範囲でコードを書いておけばポータビリティ高そうです。

docs.microsoft.com

Emacs

25.1 にアップデート。org-mode だけは手放せない感じです。

blog.kondoumh.com

VS Code がメインになったので、不要になったパッケージや設定をダイエットしてます。

Emacs も「ソフトウェアの死」を迎えつつあるのでしょうか。

qiita.com

Coda for iOS

数年前購入したきりになっていて、今年になって活用方法を発見した web 開発ツール。機能凝集性の高い IDE として VPS クライアントとして iPad で使っています。

blog.kondoumh.com

PowerShell

今まで積極的に使おうとはしてなくて今年になって愛用者になりました。Jenkins のプラグインがあるのが助かります。

blog.kondoumh.com

Windows 10 では PowerShell が標準のコマンドシェルに置き換えられるようなので、今のうちから慣れておくとよいと思います。

fossbytes.com

DOS 互換のコマンドもエイリアス定義されているから、通常の使い方ならあまり困らないと思います。それにしてもようやく cmd.exe / BAT ファイルとおさらばできるのは喜ばしいですね。あとはコマンドヒストリとかキーバインドとかフォント表示とかいろいろ改善してほしいですが。

IntelliJ IDEA

買ったきりで活用が進んでいませんでしたが、Java の検証コード作成とかで時々起動するようになりました。社内アプリのサーバーサイド開発でも使う機会が増えそうです。Ultimate では Spring Boot がサポートされてて楽ちんです。

www.jetbrains.com

Super Mario Run

年末に公開されました。やり込みがいありそうです。アプリ内課金しました。

supermariorun.com

Services

Slack

これまで使う機会がなかったのですが、遅ればせながら社内プロジェクト用にサインアップ。IRC や Lingr からの進化を目の当たりにしました。

slack.com

常駐先では Slack クローンの Mattermost を導入して朝会や業務連絡などの専用チャネル使ったり、Jenkins の自動テスト結果通知 Bot とか Excel ファイルや Redmine チケットの更新通知 Bot 作ったりと、もはやなくてはならないインフラになってます。

Mattermost

来年は、カンバセーショナル UI が来るらしいです。

medium.com

Slack の API 使って協調作業できるアプリを作りたい気持ちになっています。

ConoHa

VPS サービス。メモリ 512MB なら \630/month で VPS を維持できます。Ubuntu 16.04.1 LTS で運用中。

www.conoha.jp

Stackoverflow

US オンリーですが新サービス Documentation がいい感じです。

Moto Body

活動量計が iPhone 5s のモーションセンサーから Moto 360 に移行したため Fitbit にデータが溜まらなくなり、Moto Body アプリに移行しました。Fitbit のデータは一応ローカルにダウンロードしました。モトローラはスマートウォッチ撤退なので、サービスも間もなくシャットダウンされるでしょう。Pebble を買収した Fitbit に戻るか Google Fit にしておくか悩ましいところです。

Moto Body | Motorola

Ingress

Ingress は今年で4周年。自分は2年と数ヶ月ぐらいやってます。年末登場した Luminarie メダルは Silver でした。野良エージェントとして細々と活動してます。現在 LV11。11月の AP 2倍キャンペーンでかなり稼いだのでメダルがあと2つ金になると12なんですがノルマがなかなか厳しい。今は、なるべくミッションやるようにしてます。

charingress.tokyo

ねこあつめ

ひたすら餌を補充して、時々ねこ画像をツイートしています。あいことば登録が日課です。

Pokémon GO

インストールして1週間ぐらいでアンインストール。自分には Ingress の方がなじみました。

Amazon Music

Google Play Music を解約して、プライムで利用できる Amazon Music に移行しました。Podcast 聴いてる時間が長いので Amazon で充分かと。昔 CD からリッピングして iTumes ライブラリで管理してた音源がバックアップもろとも消失してショックでしたが、もうあまり気にしないことにしました。音楽はストリーミングで十分かなぁ。

Kindle Unlimited

こちらはお試し期間から1か月延長して利用して解約。あまり読みたいのがなくて。

Mixlr

Rebuild.fm ライブが Mixlr で配信されるようになったのでサインアップ。リスニングオンリーです。

mixlr.com

おわりに

今年も客先でフル稼働だったので、来年はもう少し個人および社内プロジェクトへのコミット比率を上げていきたいなあ。

それではよいお年を。

UML とプログラミング言語

モデル描きからコード書きへ

UML 登場時は自分でモデリングツールを書いていたこともあります。

kondoumh.com

昔はモデルを描いてからコードを書いてたというか、モデルだけ描いてお仕事が終わってたプロジェクトもありました。

UML の登場とオブジェクト指向プログラミング

UML は C++ 普及期に誕生し Java の成熟とともに発展してきました。元々 OMT や Booch など複数の流派が存在して独自に CASE ツール*1 が開発されていました。しかし、世紀末が近づいたからか、統一の機運が高まり Unified Model Language として標準化されました。

UML 2.0 以降、表現力が増し、色々なモデル表現*2がサポートされていますし、シーケンス図の opt / alt / loop やガード条件を駆使して、手続き型の処理も表現できるようになっています。とはいえ基本的にはオブジェクト指向設計、実装を主要なターゲットパラダイムとしており、クラス図で静的な構造を、コミュニケーション図やシーケンス図で動的な振る舞い (インスタンス同士のコラボレーション) を表現します。クラス分割と責務の割り当てという設計作業を支援するグラフ言語と言ってよいでしょう。GoF デザインパターンの解説本も、クラス図とシーケンス図が使われてました。

90年代後半から2000年代前半ぐらいまでは UML と OOP が開発者の必須スキルと言ってもよい状況*3でした。

UML の不得意分野

総称プログラミング

C++ の Template や Java の ジェネリクスは、オブジェクト指向ではなく、型をパラメータとした生成的プログラミング技法に端を発する技術です。そして UML はこれが苦手というか表現が面倒な部分があります。

ジェネリクスは Java におけるタイプセーフなコーディングには欠かせません。業務システムでエンティティや DAO (Data Access Object) を作る場合などでも多用します。

/** 識別子を表すインターフェース */
public interface Identifiable<T> {
  // ..
}

/** エンティティの抽象型 */
public abstract class DefaultEntity implements Identifiable<Long>, Serializable {
  // ..
}

/** DAO のインターフェース */
public interface Dao<E extends DefaultEntity> {
  // ..
}

/** デフォルト DAO 実装 */
public abstract class DefaultDao<E extends DefaultEntity> implements Dao<E> {
  // ..
}

/** 顧客エンティティ */
public class Customer extends DefaultEntity {
  // ..
}

/** 顧客 Dao */
public class CustomerDao extends DefaultDao<Customer> {
  // ..
}

といった具合。型パラメータに具象型を適用しつつ拡張・・といったことが簡潔に表現できます。これをクラス図でまじめに表現するとこんな感じ*4

f:id:kondoumh:20161202220457p:plain

モデリングするにあたり型パラメータにバインディングされた型を個別に定義しないといけません。つまりコンパイラがやってくれる型バインディングによる型生成を手動でやるということ。コード書くよりモデリングの方が複雑になってしまいます。

実際問題、ジェネリクスの構造を UML エディタで作るのはかなり面倒です。設計時にはやってられないので、実装した後に可視化のためリバースした方が楽ということになります。

関数型プログラミング

C++ の STL*5 でコンテナとファンクタ (と内部のアルゴリズム) を組み合わせてコードを書くパラダイムが登場します。ファンクタの実態は関数ポインタで、オブジェクト指向パラダイムのポリモフィズムよりも強力にデータ構造とアルゴリズムを分離可能にしました。その後、C# に LINQ が登場し、近年では Java 8 で Stream が実装され、メジャーなプログラミング言語は、関数型プログラミングパラダイムを取り込んでいます*6

関数型プログラミングが有効なのは、状態を持たない計算やデータ加工 ( map / filter ) で、Java や C# ではメソッド内の局所的な処理です。関数型はオブジェクト指向をリプレースする技術ではなく手続き型を駆逐する技術として普及しています。

一方で、メソッドや関数をファーストクラスオブジェクトとして扱っていなかった UML では関数型プログラミングを表現するのは困難です。LINQ や Stream を表現する手段はないと言ってよいでしょう。関数型プログラミングは宣言的な表現になり、可読性が高いのが特徴です。関数型プログラミングには独自のモデル表現が考案されていますが、現在のところ UML には取り込まれていません*7

ninjinkun.hatenablog.com

それでも UML は有用

UML は OOP にマッチしているので、OOP がワークする部分、すなわちクラスを跨るメソッド呼び出し、クラス自体の状態遷移にフォーカスすべきです。そして、クラスのメソッド内に実装されるアルゴリズムは、極力ステートレス (状態を持たない) に実装すべきで、その領域には関数型プログラミングが有効なのです。ということで、プログラムの構造は UML で可視化、メソッドの実装は関数型プログラミングで宣言的に実装することで可視化するというのが現状ではないかと思います。

以下 UML ツールのユースケースについて。

スケッチ

設計者と実装者の間でコミュニケーションするための用途がスケッチとしてのモデリングです。合意ができればモデルの役割は終了。未来永劫保守することは最初から諦めています。

ソースコード生成

Model-Driven Architecture が注目されていた時代がありました。モデルからコードを生成できれば、実装工数は圧縮できると期待されたのです。大量に属性を持つ Entity クラスの生成などには有効ですが、Excel マクロなどでも事足りることが多いです。コードエディタや IDE が高度に進化している現在 CASEツールが生成するコードの価値は下がる一方です。コードを書くスピードは、もはやボトルネックとは言えません*8

可視化

実装が終わったコードの可視化。主に保守用に使用します。モデリングと同様、プログラムの構造を伝えるためセンスが必要とされます。

*1:Computer Aided Software Engineering のツール

*2:アクティビティ図、ステートマシン図、コンポーネント図、配置図など

*3:少なくともエンタープライズのオープン系では

*4:実際にはこんな詳細までは図にしませんが

*5:Standard Template Library

*6:オリジナルの C++ / Java は純粋なオブジェクト指向言語であり、関数はファーストクラスオブジェクトではありませんでした。最近はラムダや無名関数がサポートされ、モダンな言語とのギャップが小さくなっています

*7:ツールベンダーは UML にこだわらず使えるようにする可能性はあります。

*8:組み込み業界では MDA のパラダイムが残っています

Magic Trackpad 2 にアップグレード

2 が気になっていた

最近になって今更ながら Magic Trackpad 2 が気になってました。Magic Keyboard との相性がよくなっているはずで、使い勝手を試したくなったから*1

ちなみに以前、指が痛いという理由で Magic Keyboard を iPad の周辺機器扱いしてましたが、最近はまた Magic Keyboard を MacBook Pro にペアリングしてメインで使っています。

blog.kondoumh.com

買ってきた

ということで買ってきました。Trackpad 2 は ¥12,800 と旧モデルと比べてかなり高くなっていてます。Kensington のトラックボール等の高級こだわりインプットデバイスと同一価格帯です。

開封するまで知らなかったのですが、値段だけでなくサイズも旧モデル (写真右) を大きく上回っています。

f:id:kondoumh:20161123091245j:plain

色が真っ白になっているのもリニューアル感があります。感圧タッチになり可動部がなくなったことも薄さに貢献している感じです。感圧タッチのおかげでクリックがパッドの上の方でもできて、テキスト選択がしやすくなり MacBook Pro の Trackpad と同等の操作ができるようになりました。Magic Keyboard と同様に Ligntning でペアリングが一瞬で完了し充電も可能。もう旧モデルとは別製品と言ってよいでしょう。

MacBook 的レイアウトの使用感

薄くなったので、これがやりやすくなりました。

f:id:kondoumh:20161123103402j:plain

blog.kondoumh.com

旧モデルでは (Wireless Keyboard とともに) 電池格納部の出っ張りが存在するおかげで凸凹してましたが、Magic Keyboard と Magic Trackpad 2 の組み合わせだと、キーボードが水平に近くなり、MacBook で入力している使っている感じにより近づいた感があります。

パームリジェクションが欲しい

かなりよくなったのですが、手のひらがパッドにタップっぽく触れるとタップになってしてしまい、テキスト入力で惨事が起こってしまうのが相変わらずストレスです*2。システム環境設定で、「タップでクリック」をオフにすると防げはするのですが。

f:id:kondoumh:20161123114740p:plain

「タップでクリック」を使えないとそれはそれでストレスなので*3、テキストは手のひらが触れないように両腕を極力広げてタイプするようにしています。

iPad Pro の Pencil のようなパームリジェクションが実装されるとよいのですが指と手のひらの識別は難しいのかな。次善策としてパッドにスイートスポットを設定できるようにすることも考えられますが、そのソリューションはデザイン的には負けた感があるのでやらなさそうですね。この問題は Trackpad が巨大化した 最新の MacBook Pro でも同じかもしれません。

まとめ

ということで ますます macOS に最適化した入力環境を整えてしまいました*4

*1:旧モデルは使わなくなってしまい Magic Mouse に回帰してました

*2:パッドの上に手のひらを置き続けている分には問題ありません

*3:Magic Mouse でも BetterTouchTool でタップでクリック設定にしてますし

*4:たまに Windows を BootCamp で使うとかなりストレスになります

Visual Studio が macOS に降臨 - Visual Studio for Mac Preview を使ってみる

年末近くになって Microsoft の イベント Connect(); // 2016 で Visual Studio for Mac が発表され、Preview を試せるようになりました。

connectevent.microsoft.com

事前にリークというか MSDN のページに掲載されてしまった*1ので、Connect 自体のインパクトは薄まってしまった模様ですが。

New Release Preview: Visual Studio for Mac | Visual Studio

Visual Studio for Mac までの流れ

OSS でクロスプラットフォームな .NET Framework 互換プロジェクト Mono から始まり、IDE である Mono Develop も開発され、Mono Develop に Xamarin の開発ツールをアドオンした Xamarin Studio と発展してきて、今年のはじめに Microsoft が Xamarin を買収。そしてとうとう Visual Studio の名前を冠したプロダクトが登場したという流れです。

Mono プロジェクトと Microsoft の関係は微妙だった時期もありましたが、.NET Core / ASP.NET Core など OSS に舵を切った今となっては、完全に Microsoft の戦略に統合されました。

Electron ベースのクロスプラットフォームコードエディタが Visual Studio Code の名前で登場したのが昨年。熟成を重ねて ATOM や Sublime Text キラーなコードエディタとなった今年 Visual Studio 自体がクロスプラットフォームな IDE として登場したということで、.NET での開発に少なからず携わってきた身としては感慨深いものがあります。

インストール

ということで、MacBook Pro (OS X El Capitan) にインストールしてみました。

Preview のパッケージをダウンロードしてインストーラを起動。

f:id:kondoumh:20161117090045p:plain

Xamarin 用の環境の選択肢が出てきます。Visual Studio 2015 でもおなじみのモジュールが並んでいます。

f:id:kondoumh:20161117090139p:plain

4GB 程度のバイナリをダウンロードしつつインストール。

f:id:kondoumh:20161117090404p:plain

1時間程度で完了。macOS に Visual Studio が降臨。

f:id:kondoumh:20161117090505p:plain

起動すると基本英語メニューですが、プロジェクト作成のダイアログなどは一部日本語にローカライズされています。

開発できるもの

開発言語は C# / F# / VBNet から選べます。Visual Basic も Mac にやってきちゃいました。

Xamarin.Forms

Visual Studio 2015 同様 iOS / Android 向け Forms アプリの開発ができます。プロジェクト構成は WPF や Windows ストアアプリとそっくりで、XAML 定義とデザイナーコードによる開発が可能です。ネイティブ の Toolkit (iOS の場合 UIKit) は Xamarin に隠蔽されていて XAML プログラミングの知識があればアプリが作れるところがメリットです。

f:id:kondoumh:20161117215222p:plain

Xamarin Forms の場合、独自の Look & Feel になりますが、iOS / Android でソースコードを共通化できます。さらに、iOS / Android それぞれに特化した Look & Feel のアプリも作れます。

Connected App と Single Page App (または Forms App) というテンプレートが選択可能で、前者は ASP.NET Core Mobile Service という BaaS 側のプロジェクトも生成してくれる模様です。Azure が前提になるのでしょうか。

おまけに iOS / macOS で SpliteKit / SceneKit に対応したゲームも作れるようです。Xamarin.Forms は macOS アプリも作れるということですね。

f:id:kondoumh:20161117191035p:plain

iOS / Android ネイティブアプリ

ネイティブアプリも C# で開発できます。それぞれネイティブのプラットフォームの知識が必要です。例えば iOS のプロジェクトでは UIKit を Mono から使えるようになっているので、UIKit の知識が必要になります。RubyMotion のような位置付けですね。

www.rubymotion.com

Xcode で作れるものとほぼ同じものが作れそうです。Metal や Open GL のような低レベルグラフィックスライブラリもサポートされています。

ネイティブアプリは Xamarin の Core なレイヤーにより Mono Framework と統合されているようです。

f:id:kondoumh:20161117191338p:plain

Android では、Wear アプリなども提供されていて、Android Studio で作れるアプリは大体作れそうです。

f:id:kondoumh:20161117202821p:plain

tvOS アプリ

iOS のファミリーである tvOS アプリも作れます。

f:id:kondoumh:20161117203046p:plain

Mac 用アプリ

Cocoa アプリが作れます。iOS 同様 SpliteKit / SceneKit や Metal がサポートされています。Cocoa アプリの開発には iOS と同様 Cocoa プログラミングの知識が必要になります。

f:id:kondoumh:20161117203133p:plain

.NET Core

Console アプリやライブラリが作れます。

.NET

GTK アプリは、Windows Form ではなく GTK の ToolKit を C# で扱えるようにしたモノのようです。

f:id:kondoumh:20161117220157p:plain

ASP.NET

ASP.NET は MVC / Web Form がともにサポートされているようです。

f:id:kondoumh:20161117203220p:plain

Windows 版との比較

Windows / Mac でカバーしているアプリ構成が異なり、Xamarin と .NET Core / ASP.NET Core の部分が共通という状況です。 ざっと比較すると以下のような感じでしょうか。

Visual Studio 2015 (Windows) Visual Studio for Mac
Xamarin.Forms
Android App
iOS App ×
ASP.NET MVC
ASP.NET Web Form
Console App
Cocoa App ×
GTK App ×
UWP App ×
WPF App ×
Windows Form ×
MFC App ×

まとめ

これまで有償だった Xamarin Studio が Microsoft 純正 Visual Studio として身近な存在になり、macOS / iOS / Android アプリを C# や XAML といった .NET ディベロッパーおなじみの技術で開発できるようになったというのは、かなりインパクトの大きい出来事と言えるでしょう。Swift が霞んでしまう可能性もあるかもです。

Xamarin アプリは Windows 版 Visual Studio でも作成できますが、iOS のアプリを作成する際、別途 Xcode が必要となってしまうため、iOS のサポートが必要な場合 Visual Studio for Mac を選択する方がよいでしょう。iOS / Android 両方の開発をしたい場合、Visual Studio for Mac は有力な選択肢と言えます。Xamarin 用の環境構築も Windows より手軽な印象です。Xamarin が流行るかどうかはこれからですが、Web サービスのスマートデバイス向け開発環境としては有力候補に違いありません。

.NET Standard のコードで書けるポータブルなライブラリの整備が WPF などのアプリ資産からの移植性を高める上でポイントになりそうです。

*1:直後に消えましたが。

ITmedia エンタープライズで「システム開発地図」の連載を開始しました

同僚の今田さんと書きました。

www.itmedia.co.jp

www.itmedia.co.jp

www.itmedia.co.jp

www.itmedia.co.jp

www.itmedia.co.jp

システム開発地図は、システム開発のいわゆる「上流」から「下流」までに作成されるであろう成果物を仮想的な平面上に並べて成果物の要素間の繋がりを可視化したものです。抽象的な情報だと繋がりを表現できないので、具体的な業務(在庫管理)を対象として成果物を作成し、成果物を作成する活動、および成果物の要素の関連を可視化しています。

インフォグラフィック的な狙いもあるのですが、個々の成果物には独自の表現形式があり、デフォルメは難しいので、実際に地図を俯瞰したり詳細にフォーカスして見ていただくのが良いかと思います。かなりベタな可視化になっています。

元々は7年前に社内でコンサルネタを纏めたもので、外部にも出してます。

システム開発地図:目次 | 豆蔵ソフト工学ラボ

今回は地図は PDF で公開しましたが、当時は地図ビューアを (今はなき) Silverlight で作成してました。可視化好きなので楽しんでました。

blog.kondoumh.com

モデルを Astah で描いてたので平鍋さんが反応してた。

当時も ITmedia さんから @IT あたりに掲載する話をいただいてましたが、ITmedia さんの人事異動が激しくいつの間にか消滅してました。改めて読み返してみて、今現在も共感できて古くなっていないと判断し、内容的にはエンタープライズのシステム構築がよかろうとのことで、あまり大きな修正はせず掲載してもらいました。

f:id:kondoumh:20161112175018p:plain

iPad でコードを書く - Coda for iOS 編

先日の記事では iOS のピクチャ・イン・ピクチャを活用してコーディング作業をアシストする方法について書きました。

blog.kondoumh.com

SFTP 対応 iOS ネイティブテキストエディタを使う

その後、iPad Air 2 を入手してさらに色々試してたのですが、ターミナルから ssh で Emacs でコード編集するのは (tmux で復元できるものの) セッション切れたり描画崩れなどの問題があり iOS ネイティブのコードエディタを使う方がよいという結論に至りました。

VPS 上で ssh 用デーモンである sshd をスーパーデーモンとして sftp サーバをオンデマンド実行できます。iOS のテキストエディタが sftp 対応していれば iPad のローカルファイルのようにコードを開いて編集できます。Ubuntu の場合 /etc/ssh/sshd_config で以下の行をコメントアウトするだけ。

Subsystem sftp /usr/lib/openssh/sftp-server

Textastic は sftp 対応しています。

www.textasticapp.com

Textastic の sftp サーバー設定画面。

f:id:kondoumh:20161020000939p:plain

サーバからディレクトリ階層・ファイルを取得して編集更新できます。Dropbox と同様に使えます。

f:id:kondoumh:20161020001417p:plain

Split View で画面割って Textastic と Prompt 行き来すると捗ります。

f:id:kondoumh:20161020080857p:plain

ブラウザでの動作確認をする時は、アプリを切り替えることになります。gulp-webserver などを使用して tmux などでセッション維持しておけば、Prompt は閉じたままブラウザとエディタだけでライフプレビューしながらコード書けちゃいます。独自のコントローラー(?) でカーソル移動とかもできますし。

f:id:kondoumh:20161020224558p:plain

ソフトウェアキーボードの分割と位置調整

ちなみに iPad でソフトウェアキーボード使うときは分割して好きな高さに移動できます。移動はキーボードアイコンをドラッグです。ずっと下でやってると手がぷるぷるしてくるのでバランス取りやすい位置でタイプするとよいでしょう。日本語もフリック入力できますし。

Coda for iOS Again

ここまでやってみて、かなり昔購入して使わなくなっていた Coda for iOS を思い出しました。

blog.kondoumh.com

当時は Diet Coda というプロダクト名だったんですね。数年間の進化を期待して久々にインストールしてみました。アプリ内で ターミナル、コードエディタ、ビルトインブラウザをタブで切り替えて使える恐ろしいアプリです。

ターミナルは Prompt 相当です(同じメーカーですし)。

f:id:kondoumh:20161020225546p:plain

コードエディタはコードハイライティングや入力補完もやってくれて Textastic に匹敵するできばえです。sftp でディレクトリをブラウズして、対象のファイルを開き編集・更新できます。

f:id:kondoumh:20161020225630p:plain

ビルトインブラウザは、JavaScript の console.log() やエラーの確認までできるため、開発者モードがない iOS のブラウザではできない(簡易な)デバッグも可能。

f:id:kondoumh:20161020230603p:plain

HTML ならエディタからプレビューに遷移できます。ブックマーク機能もあるといいな。

iOS の限界まで頑張ってる異色アプリですが、おかげで iPad でも IDE 使ってる感じに作業できます。

Coda のように1アプリの機能凝集性が高まると Multi View でできる作業も広がりますね。IPad Pro に求められるアプリはこういう感じなのかもしれません。親和性の高いアプリの融合が進んで高度な作業フローがこなせるようになっていくのではないかと想像しました。

iPad Air 2 Wi-Fi + Cellular Gold 128GB を購入

初代 Air Wi-Fi モデルから Cellular モデルにアップグレードしたくて Apple ストアで新品買ってきました。

直前にソフマップで程度のいい中古が出てるの見て結構迷ったのですが、やっぱ iPad は新品がいいなと思って。

Pro 9.7 じゃなく Air 2 を選んだ理由

Air 2 は既に2年前のモデルであり、初代 Air と何倍ものスペック差はありません。なにも考えずに現時点で最高の iPad を入手するのが正しいのかもしれませんが、今回は以下のような要因から最新を追うのはやめました。

値段

128GB モデルで2万円の価格差。チップ性能に1世代分の差があるとはいえ、ステレオスピーカーや True Tone ディスプレイはさほど重要な機能とは思えません。Pencil と専用キーボードは高すぎて手が出ないですし、高性能カメラも使わないので宝の持ち腐れです。Air のカバーやキーボードも流用できるし。1万円ぐらいですが値下げされているため Air 購入時と同じ価格でストレージが倍になっています。

Pro でも重さが同じ

可搬性は Air 2 と Pro は変わらず。より軽くなれば Pro を選択する可能性はぐっと高まるのですが。。。Air 2 の重さに慣れてから Air 持つともう戻れません。

Touch ID は Pro と同様

Touch ID は Air にはない機能で Pro と変わらず。アンロックが楽だし App Store での購入時の認証にも使えるし。

Split View も Pro と同様

前の投稿では、ピクチャ・イン・ピクチャ推しましたが、真のマルチタスクである Split View も Pro と同様使えます。

blog.kondoumh.com

iPad Pro はスマホを中心に使っているユーザー向けステップアップ製品の位置付けと、グラフィックデザインなどをこなしたいプロシューマ向け 2nd マシンの位置付けがあると思っているのですが、自分のように PC / Mac メインでタブレットはスマホに次ぐ 3rd マシンの位置付けであるユーザーには Too much というかラグジュアリーすぎるマシンと思われます。

次世代の iPad は Pro シリーズに統一されるという噂もあります (Air 2 も継続販売されるかもですが)。

www.macotakara.jp

周辺機器やアプリを含めたエコシステムが Pro のラインに移行するにはもう1世代以上熟成を待つ必要があるのではないでしょうか。

使用感

常時ネット接続は快適すぎる

Wi-Fi オンリーと Cellular の格差が大きいです。IIJmio の データ通信専用 NanoSim (3GB プラン) を刺して通勤に持ち歩いてます。取り出してすぐにネットワークに接続されてるのは想像以上に快適です。電車の中では Nexus 6P 使わなくなり、もっぱら Podcast / Music Player になってます。MNVO の格安 SIM の恩恵を享受できます。これがあれば、電話なんて feature phone で十分ではないかと思えるほどです。

大きい画面なのに軽い

Nexus 6P の 5.7 インチも片手持ち端末としては申し分ないのですが、やはり 9.7 インチの iPad はいいものです(PPI は Nexus 6P の圧勝なのですが)。自分の場合 mini のサイズはないです。

Split View 便利

ピクチャ・イン・ピクチャによるオーバーレイだけでなく、同一画面でシームレスにタスク切り替え可能な Split View は iPad で生産活動するのに欠かせない機能だと思います。

ということで、お買い得な iPad Air 2 非常に満足しています。