TwitterFacebookRSS Feed

Anti-Pattern Inc. Engineering Blog

Anti-Pattern Inc.(株式会社アンチパターン)のエンジニアブログです。

Ontology

SaaSを題材にしたオントロジーを作ってみようシリーズ #2 組織の単位など

こんにちは! 第1回目はいかがでしたでしょうか?!難しかったですかね? だとしても、第2回を読もうとしていただいて、ありがとうございます! 第2回は、さらにモリモリの内容になっちゃいましたが、テナントをベースとしたさらなる深掘りと、オントロジーの活用例の第一歩として実際にクエリをしてみたいと思います! クエリには、「SPARQL」というクエリ言語を使います。突然登場して混乱するかもなので、「SPARQL」を初めて聞いたという方は、 * SPARQLって結局何なの?実際にRDFデータに問い合わせしてみて勉強しよう! [https://tech.anti-pattern.co.jp/whatisspaeql/] という別のブログを書いておりますので、まずこちらをざっと眺めてみてください! そしてさらに!「SHACL」というものも登場してきます。これは、ざっくり言うと「RDFデータが期待する形になっているかを検証するための言語」なのですが、こちらについても * SHACLって結局何なの?実際にデータを検証してみて理解する [https://tech.anti-pat
Akihiro YAGASAKI
Akihiro YAGASAKI
27 min read
Ontology

SHACLって結局何なの?実際にデータを検証してみて理解する

オントロジー関連の記事を読んでいると、いきなり「SHACL」というものが当たり前のように登場します。 「SPARQL」と違うの?なにそれ?って感じになったりしますよね。 たとえば、 saas:WorkspaceShape a sh:NodeShape ; sh:targetClass saas:Workspace ; sh:property [ sh:path saas:workspaceBelongsToTenant ; sh:minCount 1 ; sh:maxCount 1 ; sh:class saas:Tenant ; ] . こういうコードが、説明なしにいきなり出てきます。 しかし、「これは何をしているのか」「これはどうやって動かすのか」が分からないまま読み進めるのは、正直つらいと思います。ぼく自身も、最初にこれを見たとき、完全においていかれました。 この記事は、そのおいていかれた気持ちを解消するための記事です。SHACLだけに絞って、それが何であり、どうやって実際に手
Akihiro YAGASAKI
Akihiro YAGASAKI
7 min read

自力でSQLチューニングした経験は、AIの答えを疑うための武器になる

サイロをプールに変える、という仕事 こんにちは、Anti-Patternの塚本です。 以前、サイロ化していたデータベースを共通のプール(統合基盤)へ移行するプロジェクトを担当した。 1つの基盤に集約すれば、当然そのぶん1つのテーブルが抱えるデータ量は一気に増える。データは繋がって扱いやすくなる一方で、それまで問題なく動いていたクエリが、量に負けて遅くなっていった。 当時、いまのようなAIは無かった。だから、やることは全部手作業だった。 * EXPLAIN ANALYZE を取って実行計画を読む * どこで Seq Scan が出ているか、Nested Loop が何回まわっているかを目で追う * インデックスを見直す * SQLそのものを書き換える * 不要になったテーブルの結合を削る 一つ直しては計画を取り、また直しては計画を取る。地味で、時間のかかる作業だった。 それでも、遅いクエリが速くなっていく手応えは確かにあった。 ----------------------------------------------------------------------
takeshi tsukamoto
takeshi tsukamoto
7 min read
Ontology

SPARQLって結局何なの?実際にRDFデータに問い合わせしてみて勉強しよう!

0. この記事の目的 「SPARQL」に関して書いてある記事等には、こういうコードが、特に説明もなく登場したりしますよね。 PREFIX saas: <https://example.com/ontology/saas#> SELECT ?workspace ?workspaceName WHERE { <https://example.com/data/tenant-abc> saas:containsWorkspace ?workspace . ?workspace saas:name ?workspaceName . } PREFIX、SELECT、WHERE、?workspace。見た感じSQLに似ている気もしますが、確信が持てないまま読み進めるのは、なかなかつらいものです。 この記事は、その手前の部分を埋めるための記事です。SPARQLだけに絞って、それが何であり、どうやって実際に手元で動かすのかを、説明します! ※この記事は、RDF・RDFS・OWL・Turtleについて説明済みの前提で書きます。まだの方は、先に RDF・RD
Akihiro YAGASAKI
Akihiro YAGASAKI
6 min read
Ontology

SaaSを題材にしたオントロジーを作ってみようシリーズ #1 テナント

0. このシリーズの目的 昨今、セマンティックレイヤー・オントロジーなどの記事がそこそこ盛り上がっている気がします。生成AIの時代になってきて、どちらも重要かつ実用的になってきたからかと思います。 しかし!いざ、オントロジーをやってみよう!と思っても、かなり内容が難しく、結局どうして良いのかわからない、これで正しいのかわからない、などハマりがちかと思います。少なくともぼくはハマりまくってます。 そこで!実際に自分たちが常に触れている、「B2B SaaS」を題材にしてオントロジーを作ってみて、使ってみて、理解を深めよう!というテーマで連載をしていきたいと思います。だいたい、10回くらいでまとめられればと思っておりますが、もっと多くなってしまうかもしれません。。。 そして、この連載が終わるころには、「SaaSっていったら、ベースとしてのオントロジーってこれだろ」っていうのがそこそこできているはずです。はずです。それを、「SaaSオントロジーv0」と呼ぼうと思います。そのうえで、v0を実際のみなさまのSaaSに当てはめて拡張して、おのおののSaaSのベースオントロジーを作って活用して
Akihiro YAGASAKI
Akihiro YAGASAKI
16 min read
Ontology

RDF・RDFS・OWL・Turtleの違いを整理して、ファイルで理解するオントロジー入門

「オントロジーを勉強し始めたけれど、RDF、RDFS、OWL、Turtleの違いが分からない」 これは、たぶんオントロジー初心者が最初につまずきやすいポイントです。少なくとも、ぼくはこれらが出てきたときに思考が止まりました。。。 なので、これらだけをザックリ解説する記事になっております。 特に混乱しやすいのが、次のような疑問です。 * RDFとOWLは別のファイル形式なのか * .ttlファイルはRDFなのかOWLなのか * ex:とは何を意味するのか * URIはどのように決めればよいのか * RDF/XMLでは、なぜURIの書き方が場所によって違うのか この記事では、社員と会社を表す小さなサンプルを使いながら、これらの関係を順番に整理します。 最初はつらいですが、がんばって途中まで読んでみてください!なんとなく、わかった気になるはずです。 そして意外だったのは、オブジェクト指向プログラミング言語を触ったことがある方々は、理解しやすいかもですので、その観点でも読んでみていただけますと幸いです。 ※途中で出てくるオントロジーのファイル(.ttl)を、グラフとし
Akihiro YAGASAKI
Akihiro YAGASAKI
13 min read

外部サーバー不要!Slack次世代プラットフォームでランダムメンションBotを作った話

Slack Platform @Bot メンション ▼ Trigger Event: AppMentioned ▼ Workflow 入力を受け渡すパイプライン ▼ Function コマンドパース・選出ロジック ▼ Datastore ▼ members メンバー管理 config 選出モード設定 round_robin_state ラウンドロビン状態 ※ 外部サーバー・DB不要。すべてSlack内で完結
Takashi Uchida
Takashi Uchida
5 min read

データベースストレージエンジン 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年間の顧客単価」などを計算するシステム。こちらでは「列指向(カラムナー)ストレージ」という全く別のデ
Ami Yamamoto
Ami Yamamoto
4 min read
SaaSus Platform

公共SaaSに乗り出すために、事業者が知っておくべきこと

はじめに:「日本の公共システムをイケてるシステムにしたい」 株式会社アンチパターンの信田健児です。普段は民間企業のSaaS開発支援をすることが多いですが、今回は、公共SaaSについてです。デジタル庁のイベント記事などもみながら、僕なりの解釈で書いてみたいと思います。 デジタル庁ガバメントクラウドチームは、2023年11月の日本オラクル主催セミナーで、ガバメントクラウド移行の狙いをこう語っています。 日本の公共システムを「イケてるシステム」にしたい※1 この言葉に、私たち株式会社アンチパターンは強く共感しています。 デジタル庁が推進する「公共SaaS」は、単なるクラウド移行の話ではありません。日本の公共ITが「所有」から「シェア」へと構造転換し、規模の大小を問わず全国の地方公共団体、国の政府機関、準公共団体、独立行政法人、などの公共組織がモダンな技術の恩恵を受けられる社会を目指す ── そういう大きな意志を持った取り組みだと、私たちは受け止めています。 その変革に参加できるのは、もはや大手SIerだけではありません。デジタル庁が運営するデジタルマーケットプレイス(DMP)
kenji.shinoda
kenji.shinoda
12 min read

未経験から始まったSaaS Harborの立ち上げで、コミュニティマネージャーとして学んだこと

SaaSコミュニティの立ち上げが決まり、私のコミュニティマネージャーとしての歩みが始まりました。 とはいえ、最初は「コミュニティってそもそも何?」「何をすればいいの?」という状態。まずは『ファンベース』などの書籍を読み、コミュニティのあり方を学ぶところからのスタートでした。ワクワクした一方で、不安な気持ちもありました。 SaaS Harborは、B2B SaaSに携わる人たちが、顧客への価値提供や業界の知見について学び合い、実務につなげていくことを目指したコミュニティです。 初回の立ち上げイベントでは、登壇セッションや質疑応答、親睦会、そしてイベント後のDiscordでの交流を通じて、参加者同士がつながる場をつくろうとしました。 この記事では、コミュニティマネージャー未経験だった私が、SaaS Harborの立ち上げを通じて経験したこと、現場での反省、そして今大切にしたいと考えている視点をまとめました。 なお、当日のイベント内容については、レポートとしてまとめています。イベント全体の雰囲気やセッション内容を知りたい方は、ぜひそちらもあわせてご覧ください。 SaaS Ha
Minami Nogawa
Minami Nogawa
5 min read

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:詳細な契約情
Yasuhiro Takahashi
Yasuhiro Takahashi
4 min read

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
Akira Yasuzawa
Akira Yasuzawa
4 min read