不安だ
ITで感じた不安をこのブログで解決したいと思います。
2026年2月14日土曜日
Azure DevOpsで「Invalid clientid or client secret」エラーが出た時の解決策!Workload Identity Federationへの移行手順
2026年2月8日日曜日
Excelマクロの呪縛を解く。20年目のエンジニアがkintone集計ツールにkrewDataを選んだ理由
1. はじめに:エンジニアがkintoneに触れる
ずっとスクラッチのシステム開発(フルスクラッチでの設計・実装)を主戦場としてきた私ですが、最近はお客様から「開発コストを抑えたい」「導入後、自分たちで保守・運用できる仕組みにしたい(ノーコード)」という切実な声を多く聞くようになりました。
そこで数あるノーコードツールの中から、特にカスタマイズ性の高いkintoneに着目しました。
背景にあるのは、多くの現場で「負の遺産」となっている「Excelマクロのブラックボックス化」という普遍的な課題です。これをkintoneという近代的なプラットフォームで、いかに「持続可能な形」に再構築できるか。そこがエンジニアとしての私の挑戦の始まりでした。
2. 直面した課題:標準機能だけでは超えられない「集計の壁」
RDB(リレーショナルデータベース)でいう「テーブル」を、kintoneでは「アプリ」という単位で扱います。
「社員マスタ」「サービスマスタ」といったマスタデータを参照し、日々の活動を記録する「トランザクションアプリ」を作ること自体は、kintoneの標準機能で驚くほどスムーズに実現できました。
しかし、大きな壁となったのが「複雑な集計ロジック」です。
単なる数値の足し算ではなく、以下のようなビジネスルールが絡む場合、標準機能だけでは対応が難しくなります。
• 「利用開始月は無料にする」
• 「解約日が15日以前なら当月分は0円、16日以降なら満額請求」
これをノーコードで、かつ誰が触っても壊れない「堅牢なシステム」として実装するには、標準機能の枠を超える必要がありました。
3. 解決策の比較:DataCollect vs krewData
この「標準機能の限界」を突破するための外部サービスとして、市場で圧倒的なシェアを持つのが、トヨクモ社の『DataCollect(データコレクト)』と、メシウス社の『krewData(クルーデータ)』です。
■ DataCollect(関数型・リアルタイム集計)
アプリの画面上で、Excelのように数式(SUMやIFなど)を直接入力して計算させるツールです。
• メリット: Excelの延長線上で設定できる手軽さがある。
• 懸念点: 数式の中にロジックが隠蔽されがち。数が増えると「どのフィールドにどんな式があるか」の把握が難しく、スクラッチ開発でいう「スパゲッティコード」に近い状態になるリスクを感じました。
■ krewData(ETL型・バッチ処理集計)
複数のアプリからデータを吸い上げ、工場のライン(フローチャート)のように加工して、別のアプリへ一括で書き出すツールです。
• メリット: データの結合(JOIN)やフィルタリングの流れが視覚的に固定される。
• エンジニア視点: データフローが可視化されているため、不具合時の切り分けが容易で、構造が非常に直感的です。冒頭にフローイメージも作ってみました。
4. 決め手は「3年後のメンテナンス性」と「デバッグ」
システムは「動く」のは当たり前です。本当に大切なのは「3年後に自分以外の誰かがメンテナンスできるか」という点です。
お客様の中にはExcelに詳しい方もいらっしゃいます。しかし、なまじExcelが使えてしまうと、複雑な数式を無理やり組み込んでしまい、結局「作った本人しか直せない」状態に戻ってしまう危険性があります。
その点、krewDataは「数式を意識させすぎない」UIです。集計や条件分岐がノード(図)として表現されるため、エンジニアも非エンジニアも同じ土俵で「データの流れ」を理解できます。結果的に、これが「お客様自身で運用を回せる」という真のノーコードの価値に繋がると確信しました。
5. まとめ:エンジニアがノーコードを扱う「真の価値」
Excelで実現されている現行業務には、必ずといっていいほど「泥臭く複雑な条件」が潜んでいます。
その要件をただツールに詰め込むのではなく、いかにシンプルで安定した「データのパイプライン」に落とし込めるか。そこがエンジニアの腕の見せ所です。
道具が変わっても、設計思想の重要性は変わらない。そう感じたツール選定でした。
2026年2月1日日曜日
マクドナルドの闇!?フィレオフィッシュのチーズが「半分」なのは、実は計算し尽くされた戦略だった件
1. 衝撃の発見:その時、事件は起きた
マクドナルドで不動の人気を誇る「フィレオフィッシュ」。
ホカホカのバンズを何気なくめくってみたら……
「えっ、チーズが半分しかない!?」
これ、マック好きなら一度は経験したことがある「フィレオフィッシュあるある」かもしれません。私も最初は「バイトの店員さん、忙しくてちぎれちゃったのかな?」と、クレームを入れる寸前までいきました。
2. 発覚した衝撃の事実:ミスじゃなかった!
怒りに震えながら(?)念のためネットで調べてみると、Yahoo!知恵袋や元店員さんの証言で驚愕の事実が判明。
「フィレオフィッシュのチーズは、最初から半分(1/2枚)が正規のレシピです」
なんと、入れ忘れでも手抜きでもなく、マクドナルドの厳格なルールだったのです。
3. なぜ「半分」なのか?マックのこだわり(という名の正当化?)
なぜ、わざわざ1枚を半分にする手間をかけてまで「半分」にこだわるのか。そこには深い(?)理由があるようです。
• 味のバランス: 白身魚の繊細な味を殺さないよう、チーズの主張を抑えるため。
• コスト管理: …という側面も否定はできませんが、公式には「最高の味のバランス」を追求した結果だとか。
ちなみに、ダブルチーズバーガーにはあんなにチーズが入っているのに、フィレオフィッシュだけがこの扱い。まさに「選ばれし半分の美学」ですね。
4. まとめ:知らぬは客ばかりなり
「チーズ半分」を知らずに食べ続けている人は意外と多いはず。
次からフィレオフィッシュを食べる時は、そっとバンズをめくって「今日も正しく半分だな」と、職人のこだわりを確認してみてください。
【失敗談】3COINSタブレット(2525/PRE-GHTB)をドアベル専用モニターにする計画が崩壊した話。CloudEdgeは動くのか?
1. 導入:完璧な計画だった。
「玄関のインターホン(CloudEdge)を、キッチンで座ったまま確認したい。」
そんな願いを叶えるべく、3COINS(スリコ)で1万円のタブレット(2525/PRE-GHTB)を購入。
「Android 15だし、アプリの要求はAndroid 5.0(Lollipop)以上。勝ったな。」
そう確信してレジへ向かったあの時の自分に、今の私は言いたい。「ちょっと待て」と。
2. 期待に胸膨らむ「開封の儀」
• 「これがサブ機として動けばコスパ最強伝説の始まりだ」とワクワクしながら電源をON。
3. スムーズなセットアップ
• 初期設定はいたって順調。Android 15 (Go Edition) の軽快な動きに、「お、意外とイケるかも?」と期待値は最高潮に。
4. 運命の瞬間:Google Playストアの無慈悲
いよいよ本命のアプリ「CloudEdge」をインストールしようと検索バーに打ち込みます。検索結果に出てきたアイコンをタップした瞬間、目に飛び込んできたのは……
「……えっ?」
アプリ名で検索はできるのに、、、
OSのバージョンは足りているはずなのに、、、なぜ?
5. なぜ拒絶されたのか?(技術的な考察)
調べたところ、原因はおそらくこれです。
• Android Go Editionの制限: 低スペック端末向けの「軽量版Android」であるため、特定の高度な機能やハードウェア要件(映像のエンコード/デコード等)を必要とするアプリが制限されることがある。
• カメラ・マイクの権限や解像度: ドアベルという「リアルタイム映像」を扱う特性上、このタブレットのチップセット(Allwinner A333)がサポート対象外と判断された可能性。
6. まとめ:1万5000円の勉強代
今回の教訓。
「Androidのバージョンが最新でも、Go Editionには見えない壁がある。」
CloudEdgeをタブレットで使おうと思っている皆さん、安物買いの銭失いにならないよう、せめて「Go Edition」ではない普通のAndroidタブレットを選ぶことを強くおすすめします……。
2026年1月28日水曜日
【Azure】WAFとの死闘168時間。ASP.NET CoreアプリをAzure WAFで守ろうとして学んだこと
1. イントロダクション
Azureを勉強して、ASP.NET Coreでポートフォリオ兼用のWebアプリを公開してみた。
「せっかくなら実戦的に」とAzure Web Application Firewall (WAF) を導入したが、ここからが本当の戦いの始まりだった……。
2. 最初の壁:ログインできない!
公開直後、ログインしようとすると謎の403エラー。ログを確認すると……
Restricted SQL Character Anomaly Detection (args): # of special characters exceeded (12)
何が起きていたのか?
ASP.NETの認証用Cookieに含まれる記号の多さが、「攻撃用コードを隠している」と判定されていた。
• 原因: WAFの「異常検知ルール(942450など)」。
• 気づき: セキュリティを強くしすぎると、標準的なフレームワークの挙動すら「悪」とみなされる。
3. 第二の壁:いたちごっこの泥沼
特定のCookieを除外設定(Exclusion)して「勝った!」と思ったのも束の間。今度は別のログが。
• SQL Injection Attack: SQL Tautology Detected(1=1攻撃の誤認)
• Multiple URL Encoding Detected(二重エンコードの誤認)
しかも、よく見るとCookieだけでなく、URLの引数(ARGS)でも発生している。
ここで私は、「1つ1つ除外設定を書いていたら、いつまでもアプリがまともに動かない」という現実に直面した。
4. 決戦:ログから読み解く「真犯人」
WAFのログに記録された detail_message_s をデコードして、じっくり眺めてみた。
そこには、攻撃コードではなく、ただの「日付データ」や「パスワードの記号」があった。
今回の学び(技術的な急所)
1. 多重エンコードの正体: URLの中にURLを入れる(ReturnUrl)際、記号が %252F のように多重変換される。これはモダンなWebフレームワークの「標準仕様」であって攻撃ではない。
2. パスワードの宿命: 強力なパスワードには記号が必須。これをWAFのSQLIルールで検査すること自体が、実はアンチパターン。
5. 解決策:多層防御の再設計
「WAFの設定をいじり続ける」のをやめ、「どこをWAFに任せ、どこをアプリに任せるか」の役割分担を見直した。
• WAF側: パスワードやReturnUrlなど、正規の処理で記号が入り混じる箇所は、勇気を持って「検査除外」または「特定ルールの無効化」を行う。
• アプリ側: ASP.NET Core Identityを正しく使い、「パラメータ化クエリ(静的プレースホルダ)」と「アカウントロック機能」を有効にする。
6. おわりに:本当のセキュリティとは
WAFは「魔法の杖」ではなかった。
ただボタンをポチポチして「最強」に設定するのではなく、「自分のアプリがどういうURLを吐き出し、どういうCookieを使うのか」を理解して、初めて正しく運用できる。
「いたちごっこ」を終わらせたのは、WAFの知識ではなく、自作したASP.NET Coreのソースコードの中にあった一行のエビデンスだった。








