ソフトウェア開発」カテゴリーアーカイブ

Watch Face を作ってみたい

Garmin の Watch face はConnectIQアプリで入手することができるのですが、有料のものが多いのと、ちょっとごちゃごちゃしすぎる感じがします。

かといって、文字盤を自作することができるとして用意されているFaceItは項目数的にしょぼい。

であれば、自作することが出来ないだろうか?と思って調べてみるとVSCodeで開発環境を作ることができるということだったので、まずは開発環境を整えてみた

前提

VSCodeインストール済み
Javaインストール済み

公式の環境作成に関するページはこちら
https://developer.garmin.com/connect-iq/connect-iq-basics/getting-started/

SDKインストール

SDK取得のページからSDK Managerをダウンロード。起動する。
基本的にポチポチと進めていくことでSDKをインストールすることが出来た。
バージョンに関しては、執筆時点では 7.4.3が最新のようなのでこちらをCurrentとする

無事にインストールが済んだら、続いてVSCodeに拡張を追加していく

VCSCodeへのインストールと設定

VSCodeのExtensionとして「Monkey C」を検索、インストールする。
その後、VSCodeを再起動してコマンドパレット(Ctrl+Shift+P)から「Generating a developer Key」を選択。適当なフォルダを選択してKeyを出力する。

その後、Monkey C : New Projectを選択します

プロジェクト名を適当に入力。
WatchFaceなので安直にface1とかにしてみました

続いて、なんのプロジェクトかを選択します。
ここではWatch Faceですが、その他の選択肢が若干気になりますね。。。

テンプレートとしては、Settingもできたほうがいいと考えて「Simple with Settings」を選択します。

対応するAPIレベルを選択します。
APIレベルに関しては、どの機種がどのレベルを対応しているかの一覧が公式にあるので、必要に応じて選ぶことになります。

得に今回は複数の機種での用途を考えないので自分が持っている265が5.0.0だったのでそれを選択してみました

どの製品を対象とするのかを選択します。
このあたりはシミュレーターやストアへの公開時設定に影響を及ぼしそうです

無事、プロジェクトを作ることが出来ました。

Run and Debugをそのまま押下すると。。

無事にシミュレータも起動させることが出来ました!

ちょっと遊んでみたいと思います!

請負開発とアジャイル開発

Qiitaから定期的に好評記事の一覧がメールされてくるわけですが、パラパラっと見ていたら面白い記事が

ウォーターフォールの反省とアジャイルの成功に必要なもの #SIer – Qiita

わかる。

実際に私自身、前職では自社パッケージの開発を行っていて、現在は準委任や請負両方とも関わっていたりするので、言わんとしていることはよく分かる。
そして、携わっていた準委任で参画しているスクラムの案件がそれなりに終りを迎えつつあって、色々と思うところがあったので多少乱雑ではあるけれど書いてみた。
あくまで個人の感想ではあります。

請負で契約に縛られるのは誰なのか

記事では、「問題の原因は請負開発」とあって、そのインセンティブ構造だとかに対して触れられている。

ベンダー側の立場で利益を案件単位での利益を最大化するのであれば、当初契約締結時の仕様を最低限満たすものを、最小の労力で作り上げる事になる。
作りながら「この機能はこういうケースも対応できたほうがいいのでは?」ということに気づいても、当初見積もりからずれる行為であれば事前の要件として明記されていない限りは基本実施しない。
それは、怠慢とかそういうことではなくて、見積もりの前提が崩れ、その見積もりを下に作られているスケジュールからずれ、納期に影響を与える可能性がある。
言い方は悪いが「余計なものを作っていたら間に合いませんでした」って話になりかねないのだ。

残念なところはユーザー側の立場からも話が出ることはある。
RFPのような形で契約を進めていく場合、そのRFP記載内容からズレたことを行おうとした場合にはユーザー側でも承認プロセスを巻き直す必要がある事が多い。
きっちりかっちりした企業・プロジェクトであればなおのこと、「仕様書にかかれているかどうか」を担当者も判断基準にしている。

このあたり、システムに対して明るくない担当者であるケースも多いのでしょうがないところではある。
ユーザー企業側でシステム全てに詳しい人を割り当てることができるのか?とか考え始めると大変だなぁと思うわけです。

請負におけるベンダー側のインセンティブ

すべての開発者がそうだというような性善説を唱えるわけではないけれど、開発者は基本的に良いものを作りたいと考えていると思う(作れるかは別として)。
お蔵入りするためのものを開発なんてしたくないし、大きいシステムや影響の強いシステムを稼働させるのに臆病になることはあっても、やるからにはいいものを作りたい。

先に書いたように、営利企業である限り利益を生まなければならない以上限界はある。
ただ、最低限請負開発を回していると、要件的に問題がなければそれはいいのだが、ユーザ企業側に不満が残る最低限開発だとリピートされるかが怪しい

請負をする以上、案件を取ってくると言うことが必要になるうえで、顧客満足度を高めて、多少高くてもリピートされることをインセンティブにするという考え方になるのかなぁ、と思う。
サスティナブル的な感じだろうか。

内製か外注かの選択

記事でも書かれている、内製化の流れというのは何となく分かる。

一方で、書かれているようにエンジニアを抱える以上、それに付随した組織改革とエンジニアを(数とスキルの両面で)維持する必要が生じてくる。
ベンダーであれば、様々なプロジェクトを通して色々な経験ができる可能性はあるけれど、ユーザ企業の場合は必ずしもそういう環境を提供できる企業ばかりではないと思っている。
このあたりは、ユーザ企業含めて業界の構造がどうなっていくのかは楽しみだ
自社で内製化のために雇用した人材が維持できず、結局は会社対会社でその部分を担保しようとしているのが今だと思っている。

記事では要件が固まっている場合には内製で行うメリットがないとしているが、これに関しては違和感を感じる。

内製でするべきかどうかは、その作るシステムが自社にとって競争優位を生み出すものかどうかなのではないかな、と。
作り上げる時点で何を作るのかの要件が定まっていたとしても、今後、そのシステムを元に戦っていくのであれば自社で抑えておく必要はあるし、その部分を他社に任せてしまうのは良くない。

「要件が固まっている」が”今後変わることがない”という意味であれば別だけど、変わることのないシステムなんてあるのだろうか?と思ってしまうのはエンジニアサイドの視点なのかもしれない。

一方で、要件が固まっていて特に自社の競争優位に大きな影響を与えないシステムに関しては外注を・・・と思ったけれど、よほどのニッチな領域でない限り、パッケージ導入やAI、ローコードツールによる簡易的なものづくりを内製で・・・ってなっていくんだろう。

数年で取り巻く環境は目まぐるしく変わっていくので、身の振り方は常に考えておかないといけないところですね。

EM Conf JP 2025

いつも楽しみにしているfukabori.fmが更新。
今回は来年二予定されているEMコンフに関しての紹介

122. EMConf JP 2025 w/ dora_e_m | fukabori.fm

ちなみに、11/14現在ではEM Conf JP 2025 のチケット購入は Coming Soon 状態
開催日は2/27ということでまだ結構時間がありますね
平日ということなので仕事を休めれば、行ってみたいところ。

EM。
難しい肩書だと思っています。

プロジェクト、ビジネスのマネジメントではなくエンジニアリングのマネジメントという位置づけ?
多分組織によってどこまでそれが許されるんだろうか?ということとか、そもそもジョブ定義として共通化なんてされていないんだろう。

そもそもの話として、そこまで多い人数のいない組織の場合、そのあたりの区別は曖昧で結局全てをマネジメントしないといけない状態になる認識でいる。
しっかりと役割として分担できるほどの人的にも金銭的にも余裕なんざないのである。

それでも学びは多いはずだし、そういう状態に持っていくことができればいいとは思うので、やさぐれていないで話を聞きに行きたいと思うところ。

スタッフの応募はすでに締め切られてしまっているのであくまで一参加者として。
楽しみであります

すっかり自己研鑽が止まってしまった

忙しいとしか言ってない気がするが、ここのところ忙しい。

忙しい中でもランニングだけは欠かすまいとしているので、必然的に疲れてしまったりなんだりで気が乗らず、自己研鑽として掲げているAWSの勉強がすっかり止まってしまっている。

うーん、SAA資格の有効期限。切れちゃうな。

とはいえ、このままではいけないのでなんとか切り替えなければ、と外部の情報を物色し始めました

Github Universe

GitHub Universe 2024

Githubが主催しているカンファレンスでVirtualであればFreeで参加することができます。
今年はやっぱりAI関連ですかね。

Universe 2024 – Curated Agenda (rainfocus.com)

Githubのカンファレンスは参加したことがありませんでしたが、もしかしたらコードも付いてくるかも?と思うと、テック系としては良い学びになりそうな予感がします。

来週からなので、楽しみです

5-Day Generative AI Intensive

Home (rsvp.withgoogle.com)

Googleが主催しているAI開発向けの5日間のコース。
5日間と言っても、1日あたりは2~3時間を想定しているそうな。

こちらも無料で受講が可能なので、レベル感はちょっとわからないですけれど申し込むだけ申し込んでみようかな?と。

ここのところ怠け気味なので、なんとか奮い立たせてやっていきたいところです

VBAの条件評価式は短絡評価にならない

久しぶりにVBAをせこせこと書いているわけですが、関数の概略とかそういうのを全部自力で書くというのは骨の折れるもので、なんとなくの内容をClaudeに教えて関数を作ってもらいます。

当然、そのままでは動くわけもないのでエラーをつぶしていくわけですが、ぱっと見で何が誤っているのかがよくわからないエラーにぶつかりました

Dim tableNames(5)
For i = 1 to 5
    If i > 2 And tableNames(i) <> tableNames(i - 1) Then

ちょっと内容は端折りますが、2つの条件式があった場合に、一般的なプログラミング言語であれば一つ目の条件式評価の結果、以降の条件式を評価する必要がない場合はそもそも評価が実行されないのですよね。

これによって、Nullチェックや配列のインデックス範囲外アクセスを防いだりします。
ところがVBAでは、すべての条件式が評価されるようです。

初めて知りました。。。

何というか、やっぱりVBAは独特だなぁ。。。と

AppClipの設定周り

iOSアプリにはAppClipという仕組みが導入されていて、アプリをインストールすることなく簡易にアプリを体験することができる。

AppClip概要
https://developer.apple.com/jp/app-clips

AppClip(開発者向け)
https://developer.apple.com/jp/documentation/app_clips

AppClipは上記ページにも書かれているが、NFCやQRコードなどを読み込むことでカード状のハーフモーダルが立ち上がる。
このハーフモーダルから起動されたアプリは、本来のフルサイズのアプリではなく、一部の機能のみを有効にしたコンパクトなものなので、手軽に利用が可能。
さらに、基本的にはログイン不要で利用することができるということを想定されている。

フルサイズのアプリがインストールされていれば、そちらが起動するのでその場合は本来のアプリの機能すべてを利用可能になるという寸法だ。

AppStoreConnectの設定

このAppClipだが、機能の作り込みに関してはもちろんアプリ開発が必要になるのだけれど、カードを表示する部分に関してはAppStoreConnect上の設定となる。

AppClipのカードに関する設定はAppStoreConnectのアプリ情報入力ページ、中段くらいに用意されている。
カードに関しては1800×1200ピクセルというサイズ指定がされており、AppClipが一つである場合はメインページ上で設定することになるが、複数のAppClipを用いる場合は「高度な体験を編集」というリンクに従って専用ページで情報を入力する必要がある。

体験を編集する際に必要となる情報としては、カードの画像、表示タイトル、サブタイトルと、AppClipを読み込んだ際の動きに関する設定だ。

これ以外に、呼び出し用のURLやAppClipのバンドルIDなどを指定することになる。

カードの設定変更に関する注意点

AppClipの起動によって呼び出されるアプリケーションは、当然のことながらStore公開のための審査を通過する必要があるのだけれど、AppClipに関する設定はなぜか審査と無関係に反映されているように見える(2024-09現在)。

特に、AppStoreConnect設定では、現在公開中のバージョンと準備中のバージョンがあったとして、その両方からリンクされている「高度な体験を編集」画面は同じものになっているように見える。

逆を言うと、このバージョンまではこちらのカードを利用。
このバージョン以降はこちらのカードを利用と言ったことをしようとすると、リリース後に設定を変えるなどの一手間がかかるような作りになっている。

これに関しては、やはりちょっとおかしい気もするので修正が入るのではないかと思っている。

そのため、画像の差し替えなどは比較的簡単に行うことができるように見える。
ただ、これはキャッシュが効いているのかどうかわからないが、新しい画像が読み込まれるまで少し時間がかかる可能性がある。

ちょこちょこ起こる不具合

上記のようなAppStoreConnectの動きは正直言ってバグなんじゃないかと思っている。

また、最近直ったようだが、StoreConnect上のカード画像を変更しても反映されなかった不具合もフォーラム上で散見される。

ぶっちゃけAppClipどこまで使われているんだろうなー。。ってことを思うと、近い将来に「この機能無くなるんじゃないか?」と不安に駆られる面もある。

色々と新しい体験を出してくれるのはAppleのいいところでもあるんだけど、それらを無邪気に組み込んで大丈夫なんだろうか?に関しては一抹の不安が残りますよね

Apple製品発表とかとか

Appleの製品発表イベントがあり、いくつかの新製品が出てきました。

iPhone16 Pro

iPhone 16 ProとiPhone 16 Pro Max – Apple(日本)

お題目としては、AppleIntelligenceがメインでしょうか。
ただ、出荷段階では提供されず、米国で10月から提供予定で順次提供範囲を拡大だそうな。
日本語が入ってくるのはいつになるんでしょうかね。。。
これを聴くと、そんなに急がなくてもいーんじゃないかな?という気がしてきます。

それ以外だとカメラの性能強化やカメラコントロールなども変わっていますが、正直持て余している感じがしないでもないです。
使い切れるんだろうか?という疑惑ですね。

今、手持ちの13Proですら性能を引き出せている自信はありません。

ただ、Apple Intelligenceは魅力的なものであるんですよね。
一方でそれってApple Intelligenceじゃないとだめなの?は考えなければいけないことなんでしょう。

Apple Watch Series 10

Apple Watch Series 10 – Apple(日本)

ディスプレイサイズが大きくなり、睡眠時無呼吸症候群の検知。水深計と水温センサーを搭載。。。。
無呼吸はいいとして、水深計と水温センサーはどこまで求められているんだろう?

ただ、Apple Watchの難点はやはりバッテリーなんですよね。
最大18時間ということでそれほど大きな改善はしていないように感じます。

日常用途であれば問題ないのかもしれませんが、アクティビティを重視するのであれば、ことマラソンに関してはガーミンに軍配が上がってしまいそうです。

価格は59,800から。

Forerunner 265 | スマートウォッチ | Garmin 日本

このモデルで約6万くらい。
バッテリーは13日位持ち、おすすめのワークアウトやトレーニング等を提案してくれるなど、嬉しい機能がついています。

スマートウォッチとしての一般的な機能や、健康面にフォーカスした内容であればもちろんApple Watchはいいと思うのですが、目的次第でしょうね

結局買うの?

我が家では私が購入することによって、今まで使っていた端末を子供に払い下げる運用を行っていて、長男が今の機種を狙っているのでなんだかんだでiPhoneは購入することになりそうです。

ではノーマルかProかを迷うわけですが、今やスマホの一番重要な機能はカメラだと思っていて、子供の写真を取るためであればPro一択であろうと考えています。

もちろん、別途一眼レフなどを持っていれば話は違うとは思いますが、やはり手軽に撮影できたものが美しいのが一番ですからね。

環境構築はいつも人の心を挫く

今月号のSoftware DesignはLLM特集
自分で手を動かしながらLLMを用いたアプリケーションを作ってみよう!ということなんだけど、経験上LLMに行き着くまでに挫折しそうな人が多いと感じた。

いわゆる環境構築だ

今回も紙面に環境構築のサンプルというか参考となるコマンドが載っているが、そもそもこれがなんのOS上で構築するためのコードなのかはどこにも説明されていない。

案の定、手元のWindows環境では動作しなかった。。

現場でも、環境構築の手順に関しては手順書が用意されていることが多いが、基本的にそれ通りに行くことを見たことがあまりない。

環境を構築するということは、必要となるライブラリなどを意識するうえでは大事なんだが、それを導入する、大本の環境を統一することが出来なければその先に進むことができなくなることはザラにある。

解決策の一つは、ベースとなる環境を統一してしまうことであり、やはりDockerなのではないかと思っている。

ローカル環境を汚すこともなく、共通の状態からスタートできるわけなので良いはずなんだがなかなかそういう説明をお目にかかれない。

なんとも非合理だ

もちろん、Docker上ではGUIを用いたIDEを動かすことは出来ないので開発環境としては辛いものがあるのは分かるが、せめて紙面のサンプルであればなんとかならんものかと思った。。

頭で気持ちをくじかれると、すごい徒労感が出てしまうんだよね。

iOS16 以降でデバイスの名前を取得したい

iOSアプリ開発している際に、端末を特定したい要件が入っています。

基本的にデバイスの固有情報をSwiftからUDIDやPhoneNumberを取得するのは非推奨ということで、端末固有の番号を生成するUUIDを端末特定に用いられることが多いと考えています。

ただ、今回の目的は別の外部からの情報と紐づけを行いたいので、アプリ内部で生成したUUIDでは目的を達成できないのではないかと。

そうなると、デバイス名を取得できればいいと考えているものの、Swiftでいう下記のコードはiOS16以降で実行すると

log.trace("name:\(UIDevice.current.name)")

無常にも結果は”iPhone”と返ってきました。

The entitlement for accessing the user-assigned device name instead of a generic device name
com.apple.developer.device-information.user-assigned-device-name | Apple Developer Documentation

いくつかの条件をクリアして権利を取得することができれば、デバイス名を取得することができそうだけど、正直面倒くさそう。。。

調べていると、MDM配下であれば設定値をプロファイルに追加で登録できそう

iOSアプリで端末のシリアル番号を取得する方法(MDM必須) #Swift – Qiita

ただ、ここで述べられている、「アプリ管理設定プロファイル」が、今回の案件で使っているMDMで言うところの何に当たるのかが不明。
このあたりはMDMを触っていないのでなんとも・・・。構成プロファイルとはまた別な気もするので確認かなぁ。

Claude3.5 sonet を使い始めています

GPTもいいのですが、最近はClaudeを使い始めています

Claude

日本語に関して、非常に自然な形での回答が返ってくることもいいのですが、Artifacts機能がなかなか素晴らしい。

簡単なツール作成であれば、それほど労力をかけずに作ることができるかもしれないポテンシャルを持っているように感じます。

ただ、GPTにしてもClaudeにしてもプログラムを書かせてもそれがそのまま動くということはなかなかなく、それなりに分かっている必要が出てしまいます。

Artifacts上で構築させたWebアプリケーションも、そもそもプレビューがエラーとなってしまうことも多々あり、GPTでは作成したコードの実行方法も教えてくれたのですがClaudeは聞かないと答えてくれません。

そして、往々にしてうまくいかないことも。。。
ただ、このあたりはすでにここまでできているのであればあと一歩。
壁を超えてくる日も近そうです。

WindowsとGPTが統合されて、ローカル環境のセットアップを含めて実行してくれるような未来も来るかもしれないと考えると、いよいよ持ってAI全盛期になりそうですね。

一方で、開発者に取って考えてみるとこれが開発の作業になってしまうと、楽ではあるものの開発者冥利に尽きるシーンに出くわすことが少なくなる。

さらに、とりあえずまずはAIに聞いてみると言うのは、スピードで考えれば良いことなのかもしれませんが、頭の中で論理立ててロジックを考えていくという訓練する場を減らすことにつながってしまう。
ローレベルの開発者がスキルアップをするシーンが奪われていくのではないかと要らぬ心配をしてしまいます。

それでも、使うメリットは高いと言わざるを得ないところが難しいですね。
良い付き合いができればいいと思うのですが。