はじめに
今まで、いくつか OSS プロジェクトを作ってきたので紹介します。番外編まで含めると全部で5つあります。
ESLint Plugin Pattern Rules
ESLint のプラグインです。禁止ワードと必須ワードを正規表現で設定できます。
/pages
ディレクトリでは必ずメタデータを設定する関数を呼び出さなければならない- ライブラリで非推奨となった関数をエラーとしたい
例えば上記のような状況を想定しています。
eslint.config.js
はこんな感じで書くことができます。
import patternRules from 'eslint-plugin-pattern-rules';
export default [
{
files: ["*.js", "*.ts"],
plugins: {
'pattern-rules': patternRules,
},
rules: {
// forbidde* を禁止に
'pattern-rules/banned': ['error', { patterns: ["forbidde*"] }],
// required を必須に
'pattern-rules/required': ['error', { patterns: ["required"] }],
},
},
];
自分が欲しかったから作りました。実際、結構使っていて重宝しています。
Hono Firebase Functions
Firebase Functions の中で Hono を使いたくて作りました。これも欲しいものがなかったから作ったやつです。
Hono の Lambda のアダプタを少し参考にしながら作りました。Hono の Web 標準を基準にしているところの素晴らしさと面白さを感じることができました。
こんな感じで書くことができます。
import {onRequest} from "firebase-functions/v2/https";
import {handle} from "hono-firebase-functions";
import {Hono} from "hono";
const app = new Hono();
// Hono を定義
app.get("/", (c) => {
return c.text("Hello Hono!");
});
// Firebase Functions を定義
export const hono = onRequest(handle(app));
まだ、Firebase Functions のonRequest
にしか対応してないのですが、他の種類にも対応させようと思っています。
- GitHub: takasqr/hono-firebase-functions
Vanilla Vue UI
Vue + Tailwind の UI ライブラリです。あまりクセのないプレーンな UI ライブラリという意味でVanilla
というワードを使っています。
元々 UI ライブラリは GitHub Packages でプライベートで作っていたのですが、公開できるものは公開しようということで作りました。ダークモード対応です。
Vanilla Vue なので、V が2つで W をプレフィックスにしています。w-button
のように宣言します。
コンポーネントは Storybook で管理していて、静的サイトにビルドして公開しています。
- Web: Vanilla Vue UI
- GitHub: takasqr/vanilla-vue-ui
JapanJS
日本に関連する処理をツール化して詰め合わせたライブラリです。丁度、ツリーシェイキングを勉強していて、対応したライブラリを作りたかったので作りました。
- カナ変換
- 都道府県一覧
みたいな処理を詰め合わせています。
JapanJS というワードが npm と.org
ドメインで空いていたからというのも大きいです。笑
npm でライブラリ名が空いてない問題、結構あると思っています。
- Web: JapanJS
- GitHub: japanjsorg/japanjs
番外編: このブログ
OSS としてライセンスしているわけではないのですが、このブログのソースコードも公開しています。このサイトのアプリの部分ではなく、ブログ部分だけ公開しています。
Nuxt Layers として切り出しています。
- Web: かいがらブログ
- GitHub: takasqr/hirameki-dev-ja-blog
さいごに
どれもたくさんの人が使っているわけではないです。というか多分、自分以外誰も使っていないです。笑
でも OSS でライブラリを作るのは楽しいのでこれからも続けていこうと思っています。