今まで作った OSS プロジェクト

公開日:

はじめに

今まで、いくつか 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にしか対応してないのですが、他の種類にも対応させようと思っています。

Vanilla Vue UI

Vue + Tailwind の UI ライブラリです。あまりクセのないプレーンな UI ライブラリという意味でVanillaというワードを使っています。

元々 UI ライブラリは GitHub Packages でプライベートで作っていたのですが、公開できるものは公開しようということで作りました。ダークモード対応です。

Vanilla Vue なので、V が2つで W をプレフィックスにしています。w-buttonのように宣言します。

コンポーネントは Storybook で管理していて、静的サイトにビルドして公開しています。

JapanJS

日本に関連する処理をツール化して詰め合わせたライブラリです。丁度、ツリーシェイキングを勉強していて、対応したライブラリを作りたかったので作りました。

  • カナ変換
  • 都道府県一覧

みたいな処理を詰め合わせています。

JapanJS というワードが npm と.orgドメインで空いていたからというのも大きいです。笑

npm でライブラリ名が空いてない問題、結構あると思っています。

番外編: このブログ

OSS としてライセンスしているわけではないのですが、このブログのソースコードも公開しています。このサイトのアプリの部分ではなく、ブログ部分だけ公開しています。

Nuxt Layers として切り出しています。

さいごに

どれもたくさんの人が使っているわけではないです。というか多分、自分以外誰も使っていないです。笑

でも OSS でライブラリを作るのは楽しいのでこれからも続けていこうと思っています。

この記事を書いた人

かい (@takasqr)

ソフトウェアエンジニア。個人的にアプリを作って得た知見をブログに書いています。