athome-developer’s blog

不動産情報サービスのアットホームの開発者が発信するブログ

dotnetコマンドで複数プロジェクトを持つソリューションを作成する

こんにちは、 情報システム部の高野です。
タイトル通りの内容です。社内勉強会のために調べたので載せておきます。
(VisualStudioを使えばいいじゃないって話なんですが、それを言ったらおしまいです)

環境

Windows10
.NET Tools 1.0.1

構成

最終的に下図のような構成にします。
f:id:taktak1974:20170324105015p:plain

作成手順

ソリューションのディレクトリを作成します。
ここではSampleプロジェクトとします。

mkdir Sample && cd Sample


ソリューションファイルを作成します。
デフォルトでディレクトリ名と同じ名前のソリューションファイルが作成されます。

dotnet new sln


ClassLibraryプロジェクトのディレクトリを作成します。

mkdir src\ClassLibrary && cd src\ClassLibrary


ClassLibraryプロジェクトを作成します。
デフォルトで言語はC#フレームワークはnetstandard1.4になります。
フレームワークは後からでもcsprojファイルを変更すれば変えられます。

dotnet new classlib


一応、問題ないか確認するためリストアとビルドをしておきます。

dotnet restore
dotnet build


ソリューションファイルにプロジェクトを追加します。
ソリューションファイルが存在するディレクトリで実行する場合は、ソリューションファイル名は省略可能です。

dotnet sln ..\..\Sample.sln add ClassLibrary.csproj


ちゃんと追加されたか確認します。

dotnet sln ..\..\Sample.sln list
Project reference(s)
--------------------
src
src\ClassLibrary\ClassLibrary.csproj


nugetからパッケージを追加してみます。
csprojファイルに追加されるのでリストアすれば利用できるようになります。

dotnet add package Microsoft.Data.SQLite


同様にテストプロジェクトも作成します。

cd ..\..
mkdir test\ClassLibraryTest && cd test\ClassLibraryTest
dotnet new xunit
dotnet sln ..\..\Sample.sln add ClassLibraryTest.csproj


テストプロジェクトはクラスライブラリプロジェクトを参照する必要があるので
参照するようにコマンドを実行します。

dotnet add reference ..\..\src\ClassLibrary\ClassLibrary.csproj

csprojファイルに参照設定が追記されます。



ここまでの手順で2つのプロジェクトを持つソリューションが作成できました。
手順としては、VisualStudioのGUIで作成するよりは手間がかかりますが
最初だけなので問題ない範囲なのではないでしょうか?

問題点

少し余談的な話になるのですが、テストを記述して実行します。

VSCodeのコードレンズのrun testからテストを実行すると
「Failed to run test because null」
と表示されテストが実行できない。
多分、下記の問題なので待つしか無さそう。
github.com


今のところはコマンドで

dotnet test

でもコマンドだと結果が文字化けします。
これはターミナルの文字コードUTF-8にすれば解消されます。

chcp 65001

さらに余談

以前は、dotnet builddotnet restoreはプロジェクトファイルがある場所で実行するか
コマンドにパスを指定して1つ1つ実行する必要があったのですが
現在は、ソリューションのディレクトリでコマンドを実行すると
ソリューションに属するプロジェクトすべてに実行が可能になってます。
便利になったというか以前が不便すぎましたね。




弊社ではエンジニアを募集しています。
興味がある方は下記からエントリお願いします。
athome-inc.jp

Xamarin社内勉強会を開きました

こんにちは、情報システム部の高野です。
弊社では、不定期で社内勉強会を開催しているのですが
私が検証でXamarinを触っていたのでXamarinについて勉強会を開催しました。

と言っても私も詳しいことが分かるわけじゃないので
概要を簡単に説明しただけです。

内容的には以下のようなことを話しました。

  • Xamarin.FormsとXamarin.Nativeの違い
  • Xamarin.FormsでiOSアプリとAndroidアプリを作るデモ
  • Xamarin.Formsのカスタムコントロールの作り方


Xamarin.Formsでアプリを作成するデモで簡単に両OSのアプリが作れることと、
用意されていないコントロールを使用したい場合は
自身で作成する必要があることを説明しました。
嵌れば工数がかなり削減できるが
逆にカスタムコントロールを沢山作成したり
細かいレイアウトへの要望があると工数増になる可能性があり、
その辺りの見極めが重要だと理解してもらいました。


まだ弊社でXamarinを採用するのは決まってないですが
今回の勉強会で少しでもXamarinに興味を持ってもらえれば良いなと思います。


最後に勉強会の様子です。
f:id:taktak1974:20170303142938j:plain
こんな感じで希望者8人くらいに受講してもらいました。
普段、モバイル開発をやってない人も参加してくれて
Xamarinが注目されているのが分かりました。

HoloLensの画像もアップしておこう

こんにちは、情報システム部の高野です。
前回、下記のエントリーをしましてTangoアプリケーションの様子をアップしたので
HoloLensの方もアップしておこうと思います。
dblog.athome.co.jp

最近、話題になりました。キティちゃんです。
f:id:taktak1974:20170223174847j:plain
癒されますね。


こちらは別のアプリでHoleLensというものです。
天井や壁、床に穴が空いて向こう側の風景が見えます。
f:id:taktak1974:20170223175021j:plain
f:id:taktak1974:20170223175037j:plain
f:id:taktak1974:20170223175049j:plain
HoloLensでもちゃんと壁や天井などが認識できていることが分かります。


最後が、記念すべき私の初HoloLensアプリです。
f:id:taktak1974:20170223175141j:plain

まだUnityが無く、ただのUWPアプリなんで面白くもなんともないですね。
UnityがきたらHoloLensもTangoも本格的に触ってこうと思います。

Tango搭載端末も届きました

こんにちは、情報システム部の高野です。
前回のHoloLensに続きTango搭載端末Lenovo Phab 2 Proが届きました。
dblog.athome.co.jp


今回は、管理部署から箱が開けられた状態で納品されたので開封の儀は無しです(笑)


まず大きいです。片手での操作は私の手の大きさでは無理でした。
f:id:taktak1974:20170213181939j:plain



まだ開発は着手できていないので何ができるかはあまり分かってませんが

床に花を咲かせたり
f:id:taktak1974:20170213181230p:plain


天井に太陽を浮かべたり
f:id:taktak1974:20170213181300p:plain

メジャーで測ったり
f:id:taktak1974:20170213181335p:plain

このようなことができました。
長さが測れるのはすごいですね。

テーブル越しに花を見るとこんな感じでした。
f:id:taktak1974:20170213181421p:plain
本当は全てテーブルの影に入ってないとおかしいのですが
一部見えちゃってますね。

スクリーンショットだとHoloLensと変わらないように見えますけど
実際はこうなります。*1
f:id:taktak1974:20170213181536j:plain

HoloLensよりはお手軽ですが、没入感は少ないって感じですね。


一緒に開発してみたい方は下記からエントリーをどうぞ
athome-inc.jp

*1:HoloLensのスクリーンショットは、また今度アップする予定です

Atlassian製品導入してます!

はじめまして、情報システム部の服部と申します。

当ブログとAtlassian製品のAdministratorをしております。

突然ですが、我が社では開発業務全般にAtlassian製品を導入しておりまして、Atlassian製品導入のご支援を頂いているリックソフト株式会社様のホームページに事例紹介として取り上げて頂きました。

www.ricksoft.jp

ってな事を社内SNSで話題にしたら、技術評論社さんのサイトトップのおすすめ記事にも載ってるよ!という情報をもらったので、早速エビデンスを採取してしまいました(笑)

f:id:athome-administrator:20170214133250p:plain

どんな風に使っているか、詳しくは記事をご覧頂ければと思います。

あまり若手のネタが続かないので、発作的に投稿してしまった・・・

Atlassian製品に関する情報もご提供できればと思いますので、当ブログを今後共よろしくお願いします。

アットホームオンラインシステム その3

情報システム部の豊田です。

前回、私が投稿させていただいた「アットホームオンラインシステム その2」の続きです。

  • 「アットホームオンラインシステム」とは、アットホームが加盟する不動産店に対して過去に提供していた、物件情報を業者間に公開するためのシステムです。

「ウェブ版のオンラインシステムって作れるか?」と肩を叩かれ、「とりあえずやってみます」と回答しましたが、何から始めればいいのかさっぱりわかりません。ただ、どういったシステムになるのかはイメージを持っていないと作れないことはわかっていたので、どういった機能が必要で、その為の画面はこんな感じだろうなというのをひたすら頭の中で考えていました。

一週間も経過したころ、考えたものが頭の中に納まり切らなくなりました。合わせて上司への進捗報告ができないことに気づいたのですが、頭の中にあるイメージを報告書的な体裁で書こうとしても何もかけず、「はて、どうしたものか・・・」と途方に暮れました。頭の中に納まりきらない構想が消えて行ってしまう前にアウトプットしないと「一週間、ウンウン唸ってた人」もしくは「ぼうっとしてた人」になってしまいます。

そんな時間が過ぎていき、最後には色々と面倒になってきました。「面倒な事=やりたくないこと」ですからね。そこで「自分が今したいこと」は何なのかを考えたところ、「自分が考えたものを見てみたい、作ってみたい」ということに気づきました。なので設計書だ報告書だというのは横にどけて、とにかく目に見える形にする為にモックアップを作ることにしました。これなら成果もわかり易いし、報告もし易い、改善点などもアドバイスをもらいやすい。ウェブサイト開発でのモックアップ作成は今となってはよくある話ではありますが、当時、社内ではそういったこともわからない状態でしたので最初にみんなに見せた時は「もう出来たのか」「動くのか」「検索結果がおかしいぞ」とか話が飛躍して少し困りました。ちなみに「モックアップ」という言葉はクルマのスタイリング設計や携帯電話ショップに展示してあるサンプルに対して使うものの印象が強く、当時は「紙芝居」と呼んでいました。

そこから先は、デザインの調整やモックでわかる範囲のUIの調整などを行いながら、システムの全体像やデータフロー図を描いたりして関係者と情報の共有を図って進めていきました。最初は自分で実装するつもりでしたので少しだけperlでプロトタイプっぽいものを作ったりしたのですが、それなりの規模の開発でしたので詳細設計から先は協力ベンダーさんにお願いすることになりました。少し残念だったのと、とてもほっとしたことを思い出します。

さて、開発が進み、実際に動くものが出来上がりつつある頃に一つの洗礼を受けました。今までは情報システム部内での調整でしたので、「ウェブアプリケーションとはこういうもの」というある程度の共通認識がありましたが、部外へ情報が出だした途端にWindows版のオンラインと比較されて「使いにくい」「なんで前と同じように作らなかったのか」「こんなの売れない」といった声が上がり、途方に暮れました。

インターネットが普及し始めたとはいえ、まだまだプライベートでインターネットに接続できる環境を持つ人はまれな時代です。ウェブのサービスに慣れていない人も多いことから、こうなってしまうのは仕方がないのですが、説明のしようもなく、説得することもできず、無視するわけにもいかずといった状況に陥りました。

印象に残っている指摘としては

Windowsのネイティブアプリケーションとは画面と操作感がまったく異なること。

・前の画面に遷移するのに「戻る」ボタンを使うこと。

・多重ログインを抑止する為「ログアウト」ボタンを設置したこと。

・ブラウザをフルスクリーンで使いたい人が多く、環境によって余白の大きさが変わること。(帳票印刷をブラウザの印刷で行っていた弊害)

アプリケーションはとても原始的なフレームワークというかテンプレートエンジンのようなものを使ってC言語で作りました。当時のJavaScriptはブラウザの種類による互換性の問題から利用はあまり推奨されていないこともあって、UIのあまり細かい制御は行わなかったという背景もありました。このようなネガティブな評価ばかりの状況からどうやって抜け出したのかというと、対応できる部分は対応してウェブそのものの原理的な部分は時間が解決してくれたという当たり前のステップで進んでいきました。この時に世の中に商品が生み出されるのは大変な事だと気づき、巷に溢れる様々な製品に対してとてもやさしくなりました。合わせて多少度胸が付いたような気がします。

オンラインシステムがウェブブラウザ版になってもっとも変化した部分は、従来はFAXで受信してから閲覧していたファクトシート(不動産会社の店頭に掲示してあるもの、間取り図や価格・賃料などを掲載した図面)が、パソコンの画面で閲覧できるようになったことでした。ユーザの方々にはFAXを待たなくてもすぐに閲覧できると評判は上々でした。画像フォーマットはPDFを採用。舞台裏では従来の紙のファクトシートを電子化する業務フローに手を入れたり、電子ファイルの保存領域を大幅に拡張したりとバタバタしました。その中でも印象に残っているのは、ユーザにはPDFを閲覧する為のAdobe社のAcrobat Readerのインストールをお願いすることになるのですが、「アクロバットリーダーがインストールできない!うごかない!」と言った声が想像以上に多く、当社のカスタマー窓口や営業スタッフは右往左往することとなりました。その状況が落ち着くまでは「PDFを採用したのは間違いだったのだろうか・・・」と何度も不安に陥りました。

また、PDFで閲覧できるようになったのでFAX送信のニーズは減ると思っていたのですがまったく変わりませんでした。不動産会社では、まとめてFAXのリクエストを出しておき、FAXが届くまでの間に他の業務を進めたり、外出したりして、あとでまとめて閲覧するというケースが多かったからです。これはすぐに閲覧したい状況ばかりではないということを知った時でもありました。(インターネットへはダイアルアップ接続であり、常時接続は夢のまた夢だった背景もあったと思います)

このような状況の中、無事にウェブ版オンラインシステムは順調にユーザを増やしていき、Windows版からのリプレイスも進み無事にインターネットの波に乗ることができました。ちなみにウェブ版オンラインシステムは「アットホームオンラインウェブ」という商品名となり、「アットホームオンラインシステム」という名前はついに途絶えることとなりました。

さて、なんとかインターネットの波に乗れたように思われた当社ですが、インターネットのおかげで様々な情報が瞬時に手に入る環境となったと同時に「自らが情報を発信する」時代の到来でもありました。 従来は当社の営業スタッフが不動産店舗を訪れて不動産情報をお預かりして、ファクトシートを制作し、他の不動産店舗にお届けするという流れが主でしたが、不動産業を営む当社の加盟店さん自らがウェブブラウザから不動産情報を登録し、その情報を当社のネットワークに公開するという「情報発信チャンネル」を新たに設ける事となりました。これは当社にとってもターニングポイントでした。

このシステムはビジネス面では様々な議論を呼び、物議を醸し出しましたが、開発面でもかなり苦労しました。この苦労というのは技術的な障壁ではなく、仕様策定においてリファレンスとなるものがほぼない状況からの設計だったので、かなり自由に設計し、思いの丈をひたすらつぎ込んで考えたものだったので開発者冥利に尽きる時間を過ごせたのですが、商品仕様を社内関係者に説明する段階になって他に類似商品もないために、設計の意図するところがうまく伝わらずに様々なご意見をいただくことになりました。

例えば、「不動産情報を登録した状態ではどこにも公開されておらず、『どこそこへ公開する』という操作を行わないと他の利用者からは検索されない」という構造はかなり違和感があったようで「登録したらすぐに公開されるように」という声をもらいましたが、ここは多くの人に何度も説明・説得して納得してもらいました。これはまだユルい方で、いちばん辛かったのは「新しい概念や機能に付ける名称」でした。「わかりづらい」というのはごもっともなのですが、何しろ一般的な名称も見当たらず、「日本語にするとクドい」「英語にすると聞きなれない」といった状況に陥って半泣きでした。どうやって切り抜けたのかと言えば、良いアイデアがあれば採用し、誰も答えを持っていないものはそのままという至極当たり前の方法で切り抜けました。この時に決めた名称は淘汰されたものもありますが、今でも生き残っていて社内の会話で普通に使われているものもあります。このプロダクトは「アットホームリスティングウェブ」という名前でリリースされ、多くの人にご利用いただきました。ちなみにこの「リスティング」という表現に決まるまでもずいぶんと時間を要しましたね。。。

不動産業者間をつなぐ「オンラインウェブ」、情報ネットワークへ発信する「リスティングウェブ」ができたところで、当社と当社ご利用のネットワーク加盟店をつなぐ「メンバーズウェブ」というサイトも出来上がり、しばらくはこれらの「なんとかウェブ三兄弟」でインターネットの海を渡っていきました。

順調に利用店数も増えていき、それに合わせて多くのお客様の声が集まるようになり、だいたい3か月に一度くらいのペースでアップデートを繰り返していきました。今思うとかなりのんびりしていますが、3サイトを同じチームで面倒を見ていたので一か月ごとに対象プロダクトが変わっていくようなイメージでした。こんな調子で途中何度か大きなトラブルを経験したりしましたが数年が経過した頃、3サイト間を使った機能の要望が多く出るようになり、そもそも3つ分かれていること自体が疑問視されるようになってきました。

では3つのサイトをくっつけたものに作り直せばいいかといえば、それは「手段」です。ご利用いただいているユーザのみなさまを筆頭に当社にとってもより良きツールとなる為の「目的」が必要となります。この目的が曖昧だとわざわざ時間とお金を使って作り直す為の理由がなくなりますので、会社もお金を出してくれません。

この「なんとかウェブ三兄弟」が、そう遠くない未来に陳腐化するのは目に見えていましたが、どのようにもう一段レベルアップして生まれ変わるのかの検討が必要になりました。これらのウェブサイトはシステム開発部門から生まれた経緯もあったので、まずはシステム開発サイドにて議論しましたが、どこかがしっくりきません。システム開発の目線になってしまうか、画面などのうわべだけをリニューアルしたような案になってしまいます。次に一部の営業部門のスタッフを巻き込むことで、使う人側の目線の要素が入ってくるようになりましたが、どこか定期改修っぽい変化でしかないか、技術的障壁をとてもクリアできそうにない実現不可能なアイデアなどで、次世代のオンラインシステムと呼ぶにはインパクトが足りない状況でした。

ここからが実に長かった。まずは「オンラインシステム」を起点とした考えは一向に進まずに放置気味になっているところへ、ある売り上げの下がっている地域に対しての事業としてのテコ入れを考えるプロジェクトチームが立ち上がることとなりました。そこに対して商品そのものから土地柄などの様々な視点から売り上げが下がった理由、お客様から期待されていることは何かといった現状分析を行い、その中の一つの施策として「なんとかウェブ三兄弟」のリニューアルがあるという位置付けとなりました。これによって「なぜその機能が必要なのか」という当たり前のことが明確になりました。ここまで辿り着くのに1年以上の時間を使いましたが、そこからシステム開発プロジェクトとして立ち上がりましたので、さらに開発期間を必要としました。

以上の背景を持って生まれたのが、現在の主力商品である「ATBB」です。

プロジェクトは何度も倒れかけ、相当なお金と時間を使い、生みの苦しみを嫌というほど味わいましたが、この開発のおかげで「自分が考え付くことなんてたかが知れている」「多くの仲間のアイデアと協力や努力があったから出来上がった商品」ということを実感できました。そして、「一人でできないことをみんなでやるから会社なんだ」ということを理解して今に至ります。

こういった経験ができるのも当社の社風なのかもしれません。

以上で3回に渡った「アットホームオンラインシステム」のエントリを終わりにいたします。読んでいただく方に何かを伝えようなんて大胆なことを思っていたわけでもなく、楽しく読ませる文章でもなく、思いつくままにダラダラと書かせてもらいました。最後まで読んでくださってありがとうございました。書いてる本人にはうれしかった事、悲しかった事、悔しかった事、頭に来た事など様々なことを思い出しましたが、自分でもよく覚えてるなとちょっと感心しました(笑)。 記憶を元に書いていますので、事実と異なる場合があるかもしれませんのでご了承ください。

さて、次の改革もそろそろですかね(ん?)

HoloLensが届きました

こんにちは、情報システム部の高野です。

タイトルの通り、弊社にもHoloLens届きました。
ということで開封の儀的なエントリーです。

まず箱
ゲームみたいな箱ですね
f:id:taktak1974:20170126163553j:plain


箱を開けるとこんなオブジェクトが
f:id:taktak1974:20170126163709j:plain


この妙なオブジェクトの中にすべて入ってます。
f:id:taktak1974:20170126163748j:plain


そして本体
f:id:taktak1974:20170126185012j:plain


まだ具体的なアイデアは無いですし
現状のHoloLensでは、弊社サービスとしてなにかをリリースするのは難しいですが
来るべき時に備えて触ってみようかと思ってます。
※ちなみに初日はセットアップだけでクタクタでした。


一緒に開発してみたい方は下記からエントリーをどうぞ
athome-inc.jp