freeeの開発情報ポータルサイト

日誌などに利用できる体調の表現などを行う Chrome Extension + LLM成果物を公開するときのライセンスはどうするか

真夏の自由研究〜AIを使って雑にアプリを作ろう!〜 5日目にございます。freee販売開発のbucyou(ぶちょー) がお送りします。

関西で一緒に働く kochan からこの企画を聞いた時に、確かに最近雑にアプリは作ってないなーというのを思い返したのでした。製品のためにちょっとした便利ツールなどを作ったりはしているので、今回はむしろ全くの白紙な状態で作りたいものを作るぞ! ということで、どうしようかな。などと思ったのでした。

そんな中、業務の日常を振り返ってみると、チームでやっているアサカイのことを思い出したのでした。特に私たちのチームは沖縄、関西と横断しており、一部の人がオフィスに集まっていようが細かいコンディションなどは伝わりにくいものです。

そこで、「今の元気さ」と言うコーナーがあり、⭐️の数と、ヒトコトなんかで微妙な変化を伝えていくという、やり方を取ってました。

アサカイの議事録にメンバーの体調が記載されている

これを、もうちょっとエモーショナルかつ直感的にしたいなどと思ったのでした。日記か何かに顔文字かなにかを手書きで書いて表現している、なんて人がいるのも思い出し、それを融合したような「ちょっとしたアプリ」を Gemini くんに作ってもらうことにしました。モデルは 2.5 Pro です。

プロンプトは以下です:

Chrome の Extension で、顔 (口、眉毛、目など) を描画して、それをクリップボードにコピーして貼り付けられるものが作りたいです。

  • 目的としては今の体調を表現するためのもので、日記のように使います
  • 体調を表すパラメータをつまみでいじることで、顔が変化します

こうして出来上がったのがこちら。

github.com

元気度MAXして、ストレスもMAXにするとなんか困り顔になるのがかわいらしいですね。

自作ChromeのExtensionの様子で、元気度・ストレス・眠気を設定することで顔アイコンが生成されている。元気度とストレスを全開にすると困り顔が作られる。

動作原理はすごくシンプルで、スライダーの状態に合わせて、canvas に絵を描いていくというもの。口の部分のベジェ曲線の描画なんかは、グラッフィックに慣れていないと、ぱっとは出て来ないので、作ってくれるのはありがたいものですね。

const mouthY = centerY + 30;
const mouthWidth = 50;
// 元気度に応じて口角が上下する
// (energy - 50) は -50 から 50 の範囲になる
const mouthCurvature = (energy - 50) / 50 * 20;
ctx.beginPath();
ctx.moveTo(centerX - mouthWidth / 2, mouthY);
// 二次ベジェ曲線で口を描画
ctx.quadraticCurveTo(centerX, mouthY + mouthCurvature, centerX + mouthWidth / 2, mouthY);
ctx.lineWidth = 3;
ctx.strokeStyle = '#333';
ctx.stroke();

画像を、クリップボードにコピーするので、コピーボタンを押下すれば、Google Docs や、Confluence などのツールにすぐに貼り付けることができます。

// クリップボードにコピーボタンの処理
copyButton.addEventListener('click', () => {
    canvas.toBlob(async (blob) => {
        if (!blob) {
            console.error('Canvas to Blob conversion failed.');
            messageDiv.textContent = 'コピーに失敗しました。';
            setTimeout(() => { messageDiv.textContent = ''; }, 3000);
            return;
        }
        try {
            // ClipboardItemを作成してクリップボードに書き込む
            await navigator.clipboard.write([
                new ClipboardItem({ 'image/png': blob })
            ]);
            messageDiv.textContent = 'クリップボードにコピーしました!';
            setTimeout(() => { messageDiv.textContent = ''; }, 3000);
        } catch (error) {
            console.error('Failed to copy image to clipboard:', error);
            messageDiv.textContent = 'コピーに失敗しました。';
            setTimeout(() => { messageDiv.textContent = ''; }, 3000);
        }
    }, 'image/png');
});

ところで、こういう完全にAIを使って作られたソースコードを公開するとすればどうすれば良いだろうか。と言うことに気がつきました。小さなプログラムレベルの話題ですが、少し気になりますね。

公開する以上は、ライセンスをつけないと、通常の著作権が適用されるので、仮にこれをさらに改善させたいという方がいるとすれば困りますよね。

qiita.com

ただし、今回のように、ほとんど自分が作ったわけではないのに、MITや、NYSL にように名前を明記するのは少し違う気もします。1

ということで、これも Gemini に聞いてみました。

AIが作ったコードのソフトウェアライセンスはどうするべきでしょうか。著作権を放棄していることを明示した LICENSE を置いておきたいのです。

このように返ってきました。

AIが生成したコードのソフトウェアライセンスは、著作権を放棄し、パブリックドメインとすることが一般的です。AIモデルの利用規約によっては、生成されたコードの所有権がユーザーに帰属するとされている場合が多いですが、その著作権の帰属については法的にまだグレーな部分も多いため、意図せず他者の権利を侵害するリスクを避ける意味でも、著作権を放棄するライセンスを明示しておくのが安全です。

著作権を放棄し、誰でも自由に利用、改変、再配布できるようにするためのライセンスとして、以下のような選択肢があります。

...

とりあえず、今回は Unlicense にて置いておきました。

参考記事


  1. NYSL は「煮るなり焼くなり好きにしろ」という条項のライセンスなので、適切なように見えますが著作人格権の条項がやや気になります。そもそも、著作人格権は放棄できないとして条項があるのですが、そもそも、今回のようなシンプルなものにについてAIが作ったものに著作人格権が生じるのか? というのは非常に微妙なところではあると思います。