2020年の自分の OSS 活動について振り返る

こんにちは。[Salesforce Platform Advent Calendar 2020](https://qiita.com/advent-calendar/2020/salesforce-platform) の 17日目のエントリになります。


# はじめに

今年もこのタイミングで取り立ててエントリすることがないので、[昨年](https://qiita.com/takahito0508/items/efdde0bba571ed22a32f) 同様、ここ１年で自分がどれくらいのコードをプライベートで書いてきたかを自分のために振り返りたいと思います。みなさんへの宣伝もかねて :yum:

#### 凡例
:star: 新規
:sunflower: 更新

# :sunflower: lwc-basic

> https://takahitomiyamoto.github.io/lwc-basic/

2月の [大阪での勉強会](https://accenture-technology.connpass.com/event/162121/) 用に LWC ハンズオン教材の上級編を追加していました。一部更新中の箇所も残っていますし、内容も古くなってきてるので、またそのうち書き直します :punch:

# :star: einstein-platform-services-basic

> https://github.com/takahitomiyamoto/einstein-platform-services-basic

こちらも2月の [日本橋での勉強会](https://trailblazercommunitygroups.com/events/details/salesforce-tokyo-jp-developers-group-presents-einstein-platform-hands-on-workshop-01/) 用に Einstein Language API のハンズオン教材を公開していました。この勉強会の後あたりからオフラインでの勉強会を開催できなくなってきたため、後半の Einstein Vision API のハンズオン教材は工事中のままになってしまっています :droplet: 

# :star: heat-sfdx シリーズ

JavaScript (gulp.js のタスク) で Salesforce の SOAP API や REST API をコールする方法を具体的に理解したかったため、jsforce や nforce などの便利なものをあえて使わない、自作の npm パッケージづくりに挑戦しました。内部構造をすべて理解しているため、なにか個人的にツールを作りたい時には大変重宝しています。

| category     | package                                                                      |
| :----------- | :--------------------------------------------------------------------------- |
| Metadata API | [heat-sfdx-metadata](https://github.com/takahitomiyamoto/heat-sfdx-metadata) |
| SOAP API     | [heat-sfdx-soap](https://github.com/takahitomiyamoto/heat-sfdx-soap)         |
| Tooling API  | [heat-sfdx-tooling](https://github.com/takahitomiyamoto/heat-sfdx-tooling)   |
| Common       | [heat-sfdx-common](https://github.com/takahitomiyamoto/heat-sfdx-common)     |

やってみて初めて気づいたのは、参照している内部の npm パッケージが原因で「Known security vulnerabilities detected」の通知が頻繁に来ることです。直してもすぐに別の脆弱性が見つかるようで、OSS は公開した後も小まめにバージョンアップしていかないといけないんだなあと改めて実感しています :smiley: 

# :star: sfdx-gulp-manifest

> https://github.com/takahitomiyamoto/sfdx-gulp-manifest

gulp タスクを実行することで package.xml を自動生成するツールです。このツールが作りたいがために、:point_up: の heat-sfdx シリーズを作ったという背景があります。package.xml 自動生成ツールは [過去に Java で作っていた](https://qiita.com/takahito0508/items/f5dac3ac214bc75142cf) のですが、Java をメンテナンスするのが嫌になり、自分のメイン言語である JavaScript (TypeScript) バージョンが欲しくなったので作りました。

Java ツールのときのようなオプション機能はつけていないので、必要になり次第つけていこうかと思いますが、[sfpowerkit](https://github.com/Accenture/sfpowerkit#sfpowerkitorgmanifestbuild) のように Salesforce CLI 経由で package.xml が作れるようになってきたので、自分の優先度は下がってます。プルリクお待ちしてます :wink: 

# :star: flexible-apex-trigger

> https://github.com/takahitomiyamoto/flexible-apex-trigger 

カスタムメタデータ型のよさを活用した Apex トリガフレームワークです。[去年のエントリ]( https://qiita.com/takahito0508/items/efdde0bba571ed22a32f#dependency-injection-sample-for-apex-trigger) で作ると宣言していたものです。[9 月の勉強会](https://takahitomiyamoto.github.io/apex-trigger-intermediate/) 用にハンズオン教材も公開しています。

ハンズオン資料だと当時のバージョンをもとに解説を作っているので、現在の最新バージョンと比べると少し不具合があると思います。あと、まだ直せてないですがバグも見つけています。来年にはフレームワークも最新化し、ハンズオン教材も最新にして再公開しようと思うのでご期待ください :star:

# :star: event-based-apex-logger

> https://github.com/takahitomiyamoto/event-based-apex-logger

カスタムメタデータ型と Platform イベントを活用した Apex ロギングフレームワークです。:point_up: の Apex トリガフレームワーク内でも利用しています。Platform イベントの公開数の制限には注意が必要ですが、Exception 発生時でもちゃんとカスタムオブジェクトにデバッグログを保存できます。とても便利です。

ただ、こちらも少し直しが必要なので来年最新化します。ご期待ください :star:

# :star: apex-specs-generator

> https://github.com/takahitomiyamoto/apex-specs-generator

gulp タスクを実行することで Apex クラスおよび Apex トリガの仕様書をマークダウン形式で出力してくれるツールです。もちろん:point_up: の heat-sfdx シリーズを使っています。これも便利です。ApexDoc をちゃんとソースコード内に書いておく必要があるので、そういう文化の醸成もできます。

これも来年アップグレードしたいですね。がんばって [Mermaid](https://mermaid-js.github.io/mermaid/#/) に対応したい :sunglasses:


# 所感

2 月後半からはほどんど家にいることが多い 1 年だったと思います。おかげでコーディングにいそしむことができ、新しいツールを何個も生み出せたのかな、と。

# 来年に向けて

アップデートしないといけない上記のツールたちがたくさんあるのと、また新しいアイディアもいろいろとあるので、来年も忙しいなあと思います。来年のアドベントカレンダーでよいご報告できますように。今後も見守っていただけると嬉しいです :wink: 

それではまたお会いしましょう。

# おまけ

**Zenn** もはじめてみました。

> https://zenn.dev/takahito0508

VS Code で書いて GitHub にプッシュすれば記事を公開できるので、個人的にはこっちの方が書きやすいです。いままでのハンズオン教材系はこっちに移植して最新化することが濃厚です。ぜひ Qiita にも GitHub 連携に対応してほしいー！