Anti-Pattern Inc. Engineering Blog
Anti-Pattern Inc.(株式会社アンチパターン)のエンジニアブログです。
Home
About
Corporate Site
About
Ontology
SaaSを題材にしたオントロジーを作ってみようシリーズ #1 テナント
0. このシリーズの目的 昨今、セマンティックレイヤー・オントロジーなどの記事がそこそこ盛り上がっている気がします。生成AIの時代になってきて、どちらも重要かつ実用的になってきたからかと思います。 しかし!いざ、オントロジーをやってみよう!と思っても、かなり内容が難しく、結局どうして良いのかわからない、これで正しいのかわからない、などハマりがちかと思います。少なくともぼくはハマりまくってます。 そこで!実際に自分たちが常に触れている、「B2B SaaS」を題材にしてオントロジーを作ってみて、使ってみて、理解を深めよう!というテーマで連載をしていきたいと思います。だいたい、10回くらいでまとめられればと思っておりますが、もっと多くなってしまうかもしれません。。。 そして、この連載が終わるころには、「SaaSっていったら、ベースとしてのオントロジーってこれだろ」っていうのがそこそこできているはずです。はずです。それを、「SaaSオントロジーv0」と呼ぼうと思います。そのうえで、v0を実際のみなさまのSaaSに当てはめて拡張して、おのおののSaaSのv1を作って活用していこう!という
Ontology
RDF・RDFS・OWL・Turtleの違いを整理して、ファイルで理解するオントロジー入門
「オントロジーを勉強し始めたけれど、RDF、RDFS、OWL、Turtleの違いが分からない」 これは、たぶんオントロジー初心者が最初につまずきやすいポイントです。少なくとも、ぼくはこれらが出てきたときに思考が止まりました。。。 なので、これらだけをザックリ解説する記事になっております。 特に混乱しやすいのが、次のような疑問です。 * RDFとOWLは別のファイル形式なのか * .ttlファイルはRDFなのかOWLなのか * ex:とは何を意味するのか * URIはどのように決めればよいのか * RDF/XMLでは、なぜURIの書き方が場所によって違うのか この記事では、社員と会社を表す小さなサンプルを使いながら、これらの関係を順番に整理します。 最初はつらいですが、がんばって途中まで読んでみてください!なんとなく、わかった気になるはずです。 そして意外だったのは、オブジェクト指向プログラミング言語を触ったことがある方々は、理解しやすいかもですので、その観点でも読んでみていただけますと幸いです。 ※途中で出てくるオントロジーのファイル(.ttl)を、グラフとし
外部サーバー不要!Slack次世代プラットフォームでランダムメンションBotを作った話
Slack Platform @Bot メンション ▼ Trigger Event: AppMentioned ▼ Workflow 入力を受け渡すパイプライン ▼ Function コマンドパース・選出ロジック ▼ Datastore ▼ members メンバー管理 config 選出モード設定 round_robin_state ラウンドロビン状態 ※ 外部サーバー・DB不要。すべてSlack内で完結
データベースストレージエンジン B+treeとLSM treeについて
こんにちは、アンチパターンの山本です。 現在「Build Your Own Database From Scratch in Go [https://build-your-own.org/database/#table-of-contents] 」という記事を読んで、原子性(全部成功するか何もしなかった状態にする)と耐久性(電源落ちても消えない)を持ったデータベースをGo言語で実装するというのを勉強中です。 その中でMySQL にも使われているB+treeと、もう一つのデータ構造であるLSM treeがとても面白かったためブログにまとめました! まず、そもそもデータベースの用途は、大きく分けてこの2つに分類されます。 * OLTP(オンライン・トランザクション処理) スマホアプリやECサイトのように、「1件の登録」 「1件の更新」など細かい大量の読み書きを捌くシステム。MySQLやPostgreSQLがそうです。 * OLAP(分析処理) 大量のデータから「過去1年間の顧客単価」などを計算するシステム。こちらでは「列指向(カラムナー)ストレージ」という全く別のデ
SaaSus Platform
公共SaaSに乗り出すために、事業者が知っておくべきこと
はじめに:「日本の公共システムをイケてるシステムにしたい」 株式会社アンチパターンの信田健児です。普段は民間企業のSaaS開発支援をすることが多いですが、今回は、公共SaaSについてです。デジタル庁のイベント記事などもみながら、僕なりの解釈で書いてみたいと思います。 デジタル庁ガバメントクラウドチームは、2023年11月の日本オラクル主催セミナーで、ガバメントクラウド移行の狙いをこう語っています。 日本の公共システムを「イケてるシステム」にしたい※1 この言葉に、私たち株式会社アンチパターンは強く共感しています。 デジタル庁が推進する「公共SaaS」は、単なるクラウド移行の話ではありません。日本の公共ITが「所有」から「シェア」へと構造転換し、規模の大小を問わず全国の地方公共団体、国の政府機関、準公共団体、独立行政法人、などの公共組織がモダンな技術の恩恵を受けられる社会を目指す ── そういう大きな意志を持った取り組みだと、私たちは受け止めています。 その変革に参加できるのは、もはや大手SIerだけではありません。デジタル庁が運営するデジタルマーケットプレイス(DMP)
未経験から始まったSaaS Harborの立ち上げで、コミュニティマネージャーとして学んだこと
SaaSコミュニティの立ち上げが決まり、私のコミュニティマネージャーとしての歩みが始まりました。 とはいえ、最初は「コミュニティってそもそも何?」「何をすればいいの?」という状態。まずは『ファンベース』などの書籍を読み、コミュニティのあり方を学ぶところからのスタートでした。ワクワクした一方で、不安な気持ちもありました。 SaaS Harborは、B2B SaaSに携わる人たちが、顧客への価値提供や業界の知見について学び合い、実務につなげていくことを目指したコミュニティです。 初回の立ち上げイベントでは、登壇セッションや質疑応答、親睦会、そしてイベント後のDiscordでの交流を通じて、参加者同士がつながる場をつくろうとしました。 この記事では、コミュニティマネージャー未経験だった私が、SaaS Harborの立ち上げを通じて経験したこと、現場での反省、そして今大切にしたいと考えている視点をまとめました。 なお、当日のイベント内容については、レポートとしてまとめています。イベント全体の雰囲気やセッション内容を知りたい方は、ぜひそちらもあわせてご覧ください。 SaaS Ha
AWS Marketplace Agreement APIの2026年5月アップデートを検証
こんにちは。今回はアップデートで追加されたAgreement APIの新しいエンドポイントについて検証した結果を備忘録として残します。 これまでAWS Marketplaceでの製品購入やプライベートオファーの受諾は、AWSコンソール上での手動操作(UI操作)が必要になっていました。 https://aws.amazon.com/jp/about-aws/whats-new/2026/05/aws-marketplace-agreements-api/ 2026年5月のアップデートにより、Agreement APIに新しいエンドポイントが複数追加され、プログラム経由で見積もりの生成から契約の受諾までを完結できるようになったようです。今回はその中でもプライベートオファー受諾の挙動を検証した結果をまとめます。 1. 従来の Agreement API の使い方 アップデート以前よりAgreement APIは、主に以下のような参照系の操作で利用することができました。 * search-agreements:契約一覧の検索 * describe-agreement:詳細な契約情
Next.js の moduleResolution を TypeScript 7.0 目線で見直す
はじめに 普段開発している Next.js プロジェクトを VS Code で確認していたところ、tsconfig.json の moduleResolution: "node" に関するエラーが表示されていました。 moduleResolution は、TypeScript が import の参照先をどのように解決するかを決める設定です。普段の開発ではあまり意識しない項目ですが、Node.js、Next.js、バンドラー、TypeScript のバージョンによって適切な値が変わります。 今回エラーになっていた moduleResolution: "node" は、現在の TypeScript では node10 相当の古い解決方式として扱われます。 TypeScript 7.0 では、TypeScript 6.0 で非推奨となった一部の設定がハードエラーとして扱われるため、事前に見直しておく必要があります。その中に moduleResolution: "node" の解決方式も含まれています。 この記事では、VS Code 上で表示された moduleResoluti
Slackリストのステータス管理がいまいちだったのでワークフローで解決した話
こんばんは 最近、業務情報のSlack集約に勤しんでいます。Slackリストを活用して、タスクの管理をするとリマインドやワークフローに組み込めたりなどしてとても便利です。タスク管理や案件管理など、これまでスプレッドシートや別ツールでやっていたことをSlack内で完結できるので非常にありがたいです。Slackbotを活用する上でも情報をSlackに集約することは重要な活動になるのではないでしょうか。 ただ、実際に運用してみると「ここ、もうちょっとどうにかならないの? 」というポイントが出てきました。今回は、Slackリストのステータス管理における「二重管理問題」を、ワークフローを使ってサクッと解決したお話です。 Slackリストの罠 Slackリストでリマインドや未完了タスク等の通知を使うには、「タスク追跡フィールド」という項目をリストに含める必要があります。 「タスク追跡フィールド」は主に完了チェックと期限日を使うので、これらがリストに含まれることで、期限日やステータスを確認して通知するというようなことができます。(ワークフローで通知の設定をしたけどエラーが出るぞと悩んでいた
NotebookLMにGASのコードを放り込んで「説明書」を作ってみたよ
Google Apps Script(GAS)使ってますか。最近はAIに頼めばコード自体はすぐ書けるので、以前より活用の幅が広がったという人も多いのではないでしょうか。 ただ、実際に運用を始めると、次のような地味に困る問題が出てきませんか? * 「とりあえず動く」けど、中身をちゃんと把握できていない不安。 * 他の人にツールを渡すとき、毎回同じ説明をするのが面倒。 * 数ヶ月ぶりにコードを触ると、自分の書いたコードなのに「これ何だっけ?」となる。 かといって、わざわざWordやドキュメントでマニュアルを自作するのは大変。そんな悩みを解決するために、「NotebookLM」にGASのコードを読み込ませておけば「いつでも質問できる説明書」にできるのではと思って試してみた次第です。 1. GASでよくある「地味に困る」シチュエーション GASを使ってツールを作ると、時間が経つにつれていくつか課題が出てきます。 内容を正確に理解しきれていない AIにコードを書いてもらった場合、動作は完璧でも「なぜこの行が必要なのか」を細かく理解しきれていないことがあります。そのまま運用を続ける
gitleaksを使ってsecretの誤コミット対策してみた
こんにちは、いわむらです。 AI エージェントといっしょに作業することが増えてきました。速くて助かる一方で、ローカルの設定値や検証用トークンが、気づかないうちにコミットに紛れ込むリスクは前より意識するようになりました。 間違ってコミットに含まれてしまうのを避けるため、機密情報はコミット前に機械的に止めるやり方にチャレンジしてみた内容を共有できたらと思っています。今回は、gitleaks を lefthook から pre-commit で実行する構成にしています。 本記事で紹介するのは次の3点です。 * なぜ git-secrets ではなく gitleaks に寄せたのか * ローカルで止める最小構成 * ローカルで漏れた場合に GitHub Actions でどう拾うか 人の注意に頼る場所を減らして、フローの中で止める形にしてみてます。 gitleaks に寄せた理由 もともとは git-secrets を使っていました。AWS 系の検知が優秀なのですが、それ以外のサービスには標準では対応していません。今回は AWS 以外も最初から広めに見たかったので、gitle
AI
,
docker
AIエージェントを安全に動かすサンドボックス環境の作成
Claude Code の Auto Mode や GitHub Copilot CLI の Autopilot など、AIエージェントを自律的に動かす機能があります。 これらは非常に便利な反面、ホスト環境で直接動かすのは少し不安です。依存パッケージが汚染されたり、意図しないファイルを書き換えられたりするリスクがあります。 そこで今回は、エージェントをコンテナ内に閉じ込めつつ、ホストのプロジェクトディレクトリをシームレスに扱えるサンドボックス環境を作成しました。 https://github.com/yutakahashi114/sandbox -------------------------------------------------------------------------------- 概要 このツールは1つのシェルスクリプト sandbox を実行するだけで、Docker コンテナ上の開発環境に入ることができます。 $ sandbox # 現在のディレクトリで新しいセッションを開く $ sandbox -- <cm
Page 1 of 21
Next