5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

クソアプリAdvent Calendar 2023

Day 22

リア充破壊系のクソアプリつくってみた (VS Code拡張機能で)

Last updated at Posted at 2023-12-21

この記事はクソアプリアドベントカレンダー シリーズ3 22日目の投稿です!

さて、何をやりましょうかと考えたときに丁度クリスマスが近いので、リア充破壊系をやりたいな。と思った訳なのですが...

やりたいテーマが見つからない!!😭

悩んだ末に、そういえばVSCodeの拡張機能作った事ないから作ってみよう~という気分になったので、さくっとやってみました!

その名も!Chaosman!です。

image.png

早速どういったものかを先にお見せしましょう...

ネタ見せ

ここに良くありそうな、幸せの押し売りサイトがありますね。(架空のサイトです)

image.png

ソースコードはこんなのです。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="style.css">
    <title>素敵な出会いに感謝しよう</title>
</head>
<body>
    <header>
        <h1>素敵な出会いに感謝しよう</h1>
        <nav>
            <ul>
                <li><a href="#">ホーム</a></li>
                <li><a href="#">プロフィール</a></li>
                <li><a href="#">メッセージ</a></li>
            </ul>
        </nav>
    </header>
    <main>
        <section class="hero">
            <img src="img/images.jpg" alt="素敵な出会いに感謝しよう" width="500px" height="500px">
            <p>あなたの理想で最高のパートナーを見つけましょう</p>
        </section>
        <section class="profiles">
            <div class="profile-card">
                <img src="img/img1.png" alt="プロフィール1">
                <h2>素敵太郎・素敵花子</h2>
                <p>共通の趣味: 星座鑑賞</p>
                <button>2人の最高の出会いを見る</button>
            </div>
            <div class="profile-card">
                <img src="img/img2.png" alt="プロフィール2">
                <h2>素晴光一・素晴咲</h2>
                <p>共通の趣味: カフェめぐり</p>
                <button>2人の最高の出会いを見る</button>
            </div>
            <div class="profile-card">
                <img src="img/img3.png" alt="プロフィール3">
                <h2>最高拓哉・最高かおり</h2>
                <p>共通の趣味: 海で最高の友達達と騒ぐ</p>
                <button>2人の最高の出会いを見る</button>
            </div>
        </section>
    </main>
    <footer>
        <p>&copy; 2023 素敵な出会いに感謝しよう. All rights reserved.</p>
    </footer>
</body>
</html>

そしてこの「Chaosman」が有効化している状態で、このhtmlファイルを「保存」をすると...

👇のコードに差し替えられてしまいます!

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="style.css">
    <title>呪!</title>
</head>
<body>
    <header>
        <h1>呪!</h1>
        <nav>
            <ul>
                <li><a href="#">呪!</a></li>
                <li><a href="#">呪!</a></li>
                <li><a href="#">呪!</a></li>
            </ul>
        </nav>
    </header>
    <main>
        <section class="hero">
            <img src="https://test-***" alt="呪!" width="500px" height="500px">
            <p>呪!</p>
        </section>
        <section class="profiles">
            <div class="profile-card">
                <img src="https://test-***" alt="プロフィール1">
                <h2>呪!</h2>
                <p>呪!</p>
                <button>呪!</button>
            </div>
            <div class="profile-card">
                <img src="https://test-***" alt="プロフィール2">
                <h2>呪!</h2>
                <p>呪!</p>
                <button>呪!</button>
            </div>
            <div class="profile-card">
                <img src="https://test-***" alt="プロフィール3">
                <h2>呪!</h2>
                <p>呪!</p>
                <button>呪!</button>
            </div>
        </section>
    </main>
    <footer>
        <p>&copy; 2023 呪!. All rights reserved.</p>
    </footer>
</body>
</html>

image.png

ソースコードのリア充感満載だった文言が「呪!」という文字に変化し、画像も差し替わってしまいました!

サイトはこうなります👇
image.png

そう!この「Chaosman」はリア充感のあるサイトを破壊するLinter(?)だったのです!!😇

解説 - VS Code拡張つくってみる

手順に関しては以下を参考にしながら進めました。
意外と簡単で、参考記事も多いので、ここでわざわざ全ての解説は致しません🙏

内容はいたってシンプルで、「保存」をトリガーにChatGptのAPIを叩いて、内容を書き換えてもらっているだけです。

なので、拡張機能の設定画面にAPIキーの入力箇所を設けてます。

image.png

htmlファイル限定で動作するようにしています。

...
export function activate(context: vscode.ExtensionContext) {
  //保存をトリガーに動く
  let disposableSave = vscode.workspace.onDidSaveTextDocument(async (document: vscode.TextDocument) => {
    const activeEditor = vscode.window.activeTextEditor;
    //html以外は早期リターン
    if (document.languageId !== 'html' || !document.fileName.endsWith('.html')) {
      return;
    }
    ...

chatGptへのプロンプトは👇です。

const system_content =
        '与えられたコード内にポジティブな文章があったら、それらを全て「呪!」という文字に置き換えてください。また<img>タグのsrc属性に指定されたURLを全て「https://test-****」に置き換えてください。';

さいごに

この拡張機能はパーティーグッズ的な感覚で作ったので、公開まではしてません。

やってみると意外と簡単だったので、なんとか数時間で一応形にする事ができました。

今後も自分なりの拡張機能や、世の中の役に立つ機能を作ってマーケットプレイスへ公開しようと思います!

さて、最後に、軽く告知させて頂きます🙌

実は、こんなイベントを開催、運営してます!

アプリだけでなく、デザインや企画アイディアなど...訳の分からない制作物であれば何でもOKというイベントです!

私はこの「Chaosman」を発表しようと思います~

もし、ご興味ある方いたらぜひお気軽にご参加くださいね😁

それでは、最後までご覧頂き有難うございました!!

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?