Akihiro YAGASAKI

Akihiro YAGASAKI
Ontology

SaaSを題材にしたオントロジーを作ってみようシリーズ #3.5 番外編 セマンティックレイヤー

作ったオントロジーは、結局どこで使うのか? セマンティックレイヤーという考え方を、手を動かして理解する 今回は番外編です。新しいクラスは1つも追加しません。 前回は、FeatureとEntitlementを導入しました。あわせて、Tenantから見たhasEntitlementと、Entitlementから見た entitledTenantという、逆プロパティのペアも定義しました。 ここでいったんクラスを増やす手を止めて、そこまでに作った語彙が実際どこで役に立つのか を確かめます。というのも、ここまで3回クラスを増やしてきて、そろそろこう思っている方がいるはずだからです。 これ、作ったはいいけど、結局どこでどう使うの? たとえば、実際の業務では次のような問いが出てきます。 株式会社ABCというテナントは、SaaSの機能としての販売管理機能を使えるのか? この質問に答えるために、あなたは今、どうしますか? ・請求管理システムの契約画面を開いて確認する? ・社内の管理DBにSQLを投げる? ・Slackでカスタマーサクセスに聞く? どの方法でも答えは出ます。
Akihiro YAGASAKI
Akihiro YAGASAKI
30 min read
Ontology

SaaSを題材にしたオントロジーを作ってみようシリーズ #3 どの機能が使えるのか?

オッス!おらやぎぃ! 第3回目になりました! ここまで読んでいただいている方は、きっとSaaSというものの構造についてかなり詳しくなっているのではないでしょうか?! 第2回は、テナントをベースとしたさらなる深掘りをしてみました。 第3回は、そのテナントがどんな機能を使えるのか?使っても良いのか?というのを考えていきたいと思います。 よくあるSaaSは、料金プランやオプションなどがあって、契約しているプランによって、テナントごとに使える機能や量が決まっていたりすると思います。それをどのように表現していくのか?を考えていきたいと思います。 0. 権限があっても使えない? FeatureとEntitlementで「契約上使える機能」を表現する 前回までに、B2B SaaSの利用構造と権限構造を作りました。 Organization └── usesTenant └── Tenant ├── Membership │ └── User │ ├── Workspace │ └── Re
Akihiro YAGASAKI
Akihiro YAGASAKI
40 min read
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
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
7 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

いまさら理解する「メモリとは?」- Webアプリケーションエンジニアのための低レイヤー入門シリーズ その2

先日、とあるサービスで OOMKilled が発生しまして、メモリリミットに引っかかったんですが、「そもそもなんでこんなにメモリ使ってるんだ?」を調査するのに、メモリの基礎知識が改めて大事だなと思いました。 ということで、「低レイヤー入門シリーズ」の第二弾はメモリについて深掘りしていきます! 前回の「スタティックリンクとダイナミックリンク」 [https://tech.anti-pattern.co.jp/imasarali-jie-surusutateitukurinkutodainamitukurinkunituite/] では、プログラムがどのように実行ファイルになるかを学びました。今回は、その実行ファイルが動くときに欠かせないメモリの仕組み を、C言語を使って体感していきましょう。 -------------------------------------------------------------------------------- なぜWebエンジニアがメモリを理解すべきか? 普段、Ruby on RailsやNode.js、Goなどで開発していると、メモ
Akihiro YAGASAKI
Akihiro YAGASAKI
9 min read

いまさら理解する「スタティックリンク」と「ダイナミックリンク」- Webアプリケーションエンジニアのための低レイヤー入門シリーズ その1

最近業務で、ひさびさにCコンパイラ使いました。納品されたモジュールが .so だったためです。みなさん、そんなときどうしますか?Golangでcgoとか使います? ということで、昔はプログラマーとしては当たり前の情報でしたが、昨今はWebアプリケーションエンジニアは目にすることも少なくなった情報を、改めて書いておきたいと思います! リンク??? みなさん、「リンク」って聞いたことありますか?いえ、HTMLの<a> タグの話ではありません。もちろん、ゼルダの伝説でおなじみのあの方でもなければ、イナバウワーのステージでもありません。今回は、プログラムが実行ファイルになるまでの「リンク」という工程について、C言語を例にお話しします。文章だとしても。 なぜこの話が必要なのか 「リンクとかよく知らないけど、Go言語でgo buildしたら実行ファイルができる。それで十分じゃない?」 もうおっしゃるとおり!でも、たとえば: * Dockerイメージのサイズを小さくしたい * ライブラリの更新でアプリを再ビルドせずに済ませたい * 「shared library not found
Akihiro YAGASAKI
Akihiro YAGASAKI
4 min read

BtoB SaaS開発基礎講座をやってきました!

以前、一般社団法人 日本CTO協会「新卒合同研修」にて、BtoB SaaS開発基礎講座をやってきましたので、ご紹介です。 日本CTO協会が新卒エンジニアを業界全体・企業横断で育てる試み「新卒エンジニア向けの合同研修」を5月29日から実施 |一般社団法人 日本CTO協会 「テクノロジーによる自己変革を、日本社会のあたりまえに」というミッションを掲げ、世界最高水準の技術者育成を図ることにより、日本経済の発展に資することを目的としています。 一般社団法人 日本CTO協会 [https://cto-a.org/news/20240529_release] 資料はこちらです! https://speakerdeck.com/yaggy/btob-saaskai-fa-ji-chu-jiang-zuo この講座の目的は、資料に記載のとおり 「SaaSって、こんなこと考えないといけないんだな〜〜〜」 っていうのをほんのりわかってもらって、本当の仕事の場面でこういうのが必要になった時に、 「あ、そういえばSaaSってそういうの必要だって言ってたな〜 チームでいろいろ試行錯誤してたわそうい
Akihiro YAGASAKI
Akihiro YAGASAKI
2 min read

環境変数について改めて考える

こんばんは!やがさきです。 今回は改めて環境変数について考えてみます。みなさん、環境変数使ってますよね?どんな場面で使ってますか?そりゃ、名前の通り環境ごとに変えないといけない値を入れてますよね。でも、それ、本当にそれは環境固有の情報ですか?なんでもかんでも環境変数にしちゃってませんか?1実行環境に環境変数が100個超えちゃってたりしますか?そして、その環境変数ってどうやって管理してますか?また、パスワードやクレデンシャルなどのシークレット情報も環境変数で管理してますか? このあたりを改めて考えてみたいと思います! 環境変数にすべき値 では、まずどんな値を環境変数にすべきかを改めて考えてみます。名前の通り、環境によって変わる値を環境変数にすべきなのは当然かと思うのですが、これをそのまま地でいくと、だいたいすごい数の環境変数になっちゃいます。そうすると、環境変数をメンテしたり設定したりするだけでひと仕事になりますし、どの環境変数をどうするとどんな挙動になるのかを理解するのが非常に困難になり、環境変数職人みたいな謎のスキルを持った人が爆誕したりします。これはかなりしんどい状況であ
Akihiro YAGASAKI
Akihiro YAGASAKI
4 min read

Browsersyncを非Docker環境とDocker環境の両方で使いたい

お世話になっております。矢ヶ崎です。 最近、とあるシステムのヘルプをするにあたって、既存の React プロジェクトの開発環境を Docker 化させたときに、 Browsersync がうまく動かずハマったので、ここに記しておきます。 もともと、 Docker を使わずに開発していたのもあり、 Docker を使わないでの開発環境も引き続き必要という状況だったため、 Browsersync 側にはなんの変更も加えずに動くようにするのに苦労しました。 SPAベースでできているため、 nginx の裏にはフロントエンドとバックエンドの両方を配置し、パスベースで振り分けるようにしております。 Browser => nginx => /api/ => port 3000 Backend => / => port 2000 Frontend ただ、これだけだといい感じに Browsersync が動きません。既存のBrowsersyncの設定(抜粋)はこんな感じです。 new BrowserSyncPlugin( { http
Akihiro YAGASAKI
Akihiro YAGASAKI
1 min read