WEBアプリに関するメモ

先日、iPhoneアプリのGUIを「ASP.NET Core MVC」に置き換える仕事を行いました。
今まで苦手であったWEB(HTML+CSS)の開発が人並みには出来るようになったと思います。

最近は工場向けの案件でもスマホでIoT見える化を行い、設備の稼働状態表示やエラー通知を行うなどのニーズなどがあるので、弊社のような制御系ソフト会社でもWEBアプリの知識が必要になってきています。

いくつか今後の開発のためにメモを残しておこうと思います。

・UI要素の配置に困ったらflexを使う

 今までWEBでのUI要素の配置が思うようにいかず、デスクトップアプリより柔軟性がないと思っていましたが、flexを使用するとほぼデスクトップアプリと同じ間隔で配置できるようになりました。
 まずはflexを使用し、うまくいかない場合だけ他の方法を使用するのがよさそうです。

・スクロール位置の復元

 クライアントからサブミットしてサーバに一旦戻して再描画するとスクロール位置が上に戻ってしまいます。
 これはサブミット前にスクロール位置をinputタグに格納し、再描画時に同じスクロール位置に戻せば解決します。
 これを各ページで行うのではなく、全てのページで共通実装にするのが良いです。

・アイコンライブラリ

 アイコンライブラリを使用して簡単にアイコンが表示できます。
 https://icons.getbootstrap.jp/

・Bootstrapの機能をもっと活用

 以下のBootstrapの目次を見た感じだと、スピナー、トースト、ツールチップあたりは導入しやすくすぐに役立ちそうです。
 https://bootstrap-guide.com/outline

ソフトの作りのこだわり。

こんにちはmtjです。

ソフト開発の費用について。
ソフトの費用というと機能である程度平滑化できるように思われますが 実際は同じ金額で全く同じソフトができるわけでは有りません。

同じ人が作ればある程度は平均化ができますが別な人、会社が作ればUIの作り、処理の作り等により金額もばらばらです。
UIのアニメーション、綺麗さ等に凝れば金額は上がります
処理も1秒も待たせたくないという仕様であれば金額は上がります

そこで大事になっていくのが営業の手腕だと思います。
アニメーションが必要無い箇所で凝ったアニメーションを作る必要はないですし
処理も別に時間がかかってもいいような物であれば即終わるような仕組みを作らなくてもいいです。

相手にとってどの部分が重要かを判断し提案できるかが技術者の腕だと思いました。

開発用PC更新

オフィスではデスクトップPCを使って開発を行っています。
先日、約4年間使用したPCを更新しました。
好きなPCを選んで良いとのことでしたので、Intel Core i9-14900 の高性能なPCにし、
開発がとても快適になりました。

4年前の前回の更新時はCPUにAMD Ryzenを選び、
SSDはそれまでのPCで使用していたHDDをクローンして使用しました。
今回はSSDのクローンが上手くいかなかった為、OSのインストールから行いました。

開発用PCには、新旧様々な開発環境やアプリケーションとその設定、ドライバーなどが入っており、
新規にインストールして開発環境を一から構築するのは骨の折れる作業です。
特に古い開発環境は素直にインストールできなかったりする場合もあります。

ただその甲斐もあって、CPU, SSD, メモリなどの世代が新しくなった事や、
OSクリーンインストールを行ったことで、全体的にきびきび動作するようになり、快適です。
開発中のソフトウェアのビルド時間も大幅に短縮され、効率的にもなりました。
気分も一新して、開発に挑みたいと思います。

.NET MAUIへの移行

今月とうとうXamarinのサポートが終了しましたね。
後継のクロスプラットフレームワークである.NET MAUI[1]に移行するため、
調査や準備を進めています。

現行のアプリのUIを1から新規プラットフォームで構築し直すのは大変です。
しかし、今回は以下の理由などにより、カメラなどネイティブの機能が必要ない箇所を除いて、
WebViewにhtmlを表示するWebアプリ化を行うことになりました。
・サーバーと通信するアプリである
・Webアプリの構築基盤が既に存在する
このWebアプリ化を移行前に行うことにより、MAUIへの移行もスムーズに行えると思われます。

MAUIに関しては、3月に手が空いていたので業務時間内に調査・勉強して、
実機でアプリを実行できるところまで進んでいます。
WPFと同様xamlでUIを記述する形式なため、WPF開発者ならスムーズに開発できる印象を受けました。
VisualStudioをMacとペアリングすることで、開発まではWindows上で行えるのも便利で良いですね。

MAUIの開発が進みましたらまた何か書こうと思います。
以上です。

[1].NET Multi-platform App UI. 2022年に正式リリース。

WEBからダウンロードしたファイルのセキュリティブロックを解除する方法

WEBからダウンロードしたファイルはセキュリティブロックされており、「Microsoft Defender SmartScreen」の確認画面が表示されたりします。

このセキュリティブロックを解除するには、代替データストリームのZone.Identifierを削除する必要があります。

C#で解除する拡張メソッドを作成しました。
以下のUnblockメソッドを実行すると解除できます。


[DllImport("kernel32", CharSet = CharSet.Unicode, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool DeleteFile(string name);

public static void Unblock(this FileInfo file) {
    file.IsReadOnly = false;
    DeleteFile(file.FullName + ":Zone.Identifier");
}

ソフトウェアの価値。

こんにちはmtjです。

ソフトウェアの価値についてですが ソフトウェアは基本買ってきただけでは価値を生まないと思っています。
それこそ普段使うプログラム開発用のIDEも買うだけでは何も生産を行いません。

IDE等もプログラムを効率よく開発したいから買うので購入して即成果が上がるような物でもありません。
道具を使いこなして価値を産む人がいて初めて価値が生まれます

流行りのIOT等の機器も遠隔で情報を知れるだけの物ですが
その情報を使って価値を生んでいくのは利用者側です。

自分たちもソフトを作る上でその先に価値があるのかを考えながら開発していきたいです。

Xamarinのサポート終了

弊社でも使用しているMicrosoft Xamarinのサポートが間もなく終了します。
iOS関連と合わせて開発環境の状況を整理しました。

Microsoft関連
- 2024/5/1:Xamarin.Android サポート終了
- 2024/5/1:Xamarin.Forms サポート終了
- 2024/5/1:Xamarin.iOS サポート終了
- 2024/8/31:Visual Studio for Mac廃止

iOS関連
- 2024/4/29:ストアへのアプリは、Xcode 15 と iOS 17 SDKが必要

既存のiOSアプリは、ストアがXcode 15が受け入れられるまではアップデートは可能と思われます。
Visual Studio for Mac廃止に伴い、
MacでのC#開発用IDEの代替としてはVisual Studio Code、
または仮想Windows上のVisual Studioが位置づけされているようです。
MacでUnity開発などを行っている場合は大きな影響がありそうです。

弊社でも今後はモバイルアプリは.NET MAUIに移行していきます。

VisualStudioのGitでブランチの変更内容を確認

Gitでコミットをする場合、都度ざっくりコミット内容のチェックは行うのですが、
とは言え見落としなどしてしまうことがあります。

なのでブランチをmasterにマージする前に全ての変更を最終確認したいと思っていたのですが、
VisualStudioのGitなら以下の手順で簡単に確認できることに今更気が付きました。

1. VS上部のGitからブランチの管理を開く
2. ウィンドウ左部のブランチにてmasterを右クリックして対象のブランチにmasterをマージ

3. ウィンドウ右部のローカル履歴にてブランチの最新のコミット(masterをマージしたコミット)と
    masterの最新のコミットを同時に選択し、右クリックしてコミットの比較

小規模かつ短期間のブランチなら都度確認だけでも問題ないかもしれませんが、
開発が長期に渡った場合や、ブランチ内で修正を何度も行った場合などは、
ゴミとなるコードが残っていないかや意図せず破壊的変更を行ってしまっていないかなど
最終確認するのが良いのかなと思っています。
以上です。

VSTOによるOfficeアプリの拡張

業務で久しぶりにVSTOを使用しました。

VSTOは、EXCELやWordなどのOfficeアプリケーションをカスタマイズし、機能を拡張するためのフレームワークです。これは、EXCELマクロ(VBA)の代替として使用され、以下の点で優れています。

1. C#で実装:VSTOはレガシーなVBではなく、C#でアプリケーションを拡張できます。
2. .NETのフル機能:VSTOは.NETフレームワークの全機能を利用できます。
3. GUI:WindowsFormsやWPFを使用して、Officeアプリケーションのユーザーインターフェースをカスタマイズできます。
4. コードの隠蔽:VSTOを使用することで、コードを隠蔽してアプリケーションを保護できます。

お客様がEXCELのVBAを使用して、工場内の設備の出来高や計測結果の集計などをされている場合がよくあります。
このようなVBAマクロをVSTOに置き換えることは、ユーザにとって新たな価値が生まれる可能性があります。

今後もVSTOを使用して効率的な開発を進めていきます。

新しい言語と古い言語

こんにちは mtjです。

世の中には様々なプログラムの言語がありますが その中にももうサポートされていない古い言語だったりできたばかりの言語があります。

自分は古い言語、フレームワークは基本しかたなく使う者だと思っています。
新しい言語はそれこそ使う側の負担、言語自体の新たな不具合、仕様等未知の部分が多く使う場合のリスクが読み難くなります。
慣れた言語の方が開発スピードも既存のライブラリ等も使用できるので開発費用も低く済みます。
しかし新しいOSで動かなかったり 新しい機能が使えなかったりします。

では新しい言語の利点で自分が思うことは
・新しい言語のほうがセキュリティ懸念が低い
 現在のOSのセキュリティ機能を使ったりするので言語自体のセキュリティは高い場合が多いです。
・新しいOSの機能が使える
・コードの書き方等が簡潔だったり古い言語では使えない用な機能があり 速度が結果的に早くなる場合がある。
・最新のサービス等の機能が使える。

プログラム言語は基本新しい物を取得していくのが最良だと自分は思います。

しかし、MACネイティブの場合はOSで強制的にSDKが移行されてしまうので 古い機能を全部消して新しい機能に置き換える事が強制されてしまいます
既存のコードはもちろんまともに動かない場合が多いです そういった意味でもMACは開発者に優しく無いとは思っています。
ちょっとの機能追加でも莫大な時間がかかってしまう場合があるのがMACです。