プログラミング初学者や個人開発未経験者にこそお勧めしたいchrome拡張機能開発

## dアニメストアでウォッチパーティーをする拡張機能を公開しました

唐突に宣伝から入ってしまい申し訳ないのですが、[dアニメストア](https://anime.dmkt-sp.jp/animestore/)でもオンラインで友人と同時に視聴（ウォッチパーティー）を実現するChrome 拡張機能『[**d-party**](https://chrome.google.com/webstore/detail/d-party/ibmlcfpijglpfbfgaleaeooebgdgcbpc)』を公開しました。


- chrome ウェブストア

https://chrome.google.com/webstore/detail/d-party/ibmlcfpijglpfbfgaleaeooebgdgcbpc

- 開発リポジトリ

https://github.com/d-party

https://twitter.com/U_Not_401/status/1503658909185482754?s=20&t=VBGBDHs0HNtJnVX51kCsnQ

私含めアニメオタクの多くが加入している[dアニメストア](https://anime.dmkt-sp.jp/animestore/)ですが、

1. 同時に視聴する方法として結構脳筋なことが書いてある
2. Telepartyなどの既存拡張機能もdアニメストアには対応していなかった
3. 仕事としてかかわっているプロダクトに非同期通信が必要になってきた

という課題感から、修行のついでに作ってみました。

よろしければインストールいただけると幸いです。

余談ですが、[公式ページ](https://anime.dmkt-sp.jp/animestore/CP/CP00001106)に

**＞＞＞＞＞ 決めた時間に集まって、みんなで同時再生 ＜＜＜＜＜＜**

という手順が書いてあったのを見たときにはちょっと笑ってしまいました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241757/d92eaec8-4193-5eb3-f5e4-cfe30f3e135a.png)

前置きはさておき[**d-party**](https://chrome.google.com/webstore/detail/d-party/ibmlcfpijglpfbfgaleaeooebgdgcbpc)の開発の中で、課題設定や市場分析といった、プログラミングだけでは得られない経験を体験しました。

今までの開発や育成されてきた経験の中で、chrome拡張機能開発は初学者にとって必要な要素が**最も効率的に詰まっている**なと感じ、その理由を布教しに来ました。

## プログラミング力 ≠ 課題解決力

多くのプログラミング初心者は、プログラミングによって課題を解き世間の何らかの役に立ちたいと志しているはずです。

かつて私もそんな時期が10年くらい前にありました。
当時は、javaの入門書に従ったり、webの入門書に従って見栄えの良い静的なポートフォリオサイトを作ったりもしました。

しかしながら、そんな活動を1年以上続けていて気付いてしまったのです。

**『あれ！？プログラミング出来るようになったのに、社会の課題を一つも解いてないぞ・・・？？』**

当然と言えば当然ですが、多くのプログラミング入門書には宿題やテストという意味での課題はあっても、**各個人が解くべき社会課題というのは示してくれません。**
これは各個人の立場や視点、又は時代によって異なってきます。

ここでは仮に、プログラミング力を『プログラミング言語を扱う能力』として定義したとき、プログラミング力を鍛えることが、課題解決力につながっていくとは限らないと言えます。

すなわち、初学者の課題解決力を向上させるためには、**課題と向き合い、問題を設定し、それを解くという体験**を経験する必要があります。

## ちょうどよいのがchrome拡張機能（chrome extensions）

初学者が課題解決を体験するため **『題材』** には、どのような要素が必要なのかを考えていきましょう。

まず、満たすべき要素についてまとめていきます。

- 短期間で作れる
    - 修行のためのプロジェクトを半年や1年も続けるのは効率がよくありません。
- 程よいプログラミング技術で作れる
    - 求める技術力が高すぎる題材は、本筋以外の部分にコストがかかります。
    - また技術力の向上だけが、価値を出すために必要な要素ではないと知っておくべきです。
- ゼロから課題そのものを設定する体験ができる
    - マーケットアウト/プロダクトインなど、どのように課題を設定していけばよいのかという基礎を学ぶべきです。
- 既存の市場やサービス、技術の分析を行える
    - 大半の課題解決には既存の資産が必要になります
    - 既存技術の調査などで、社会のどこに課題があるのかを探す力が必要です。
- 成果を公開してユーザーに使ってもらえる
    - やはりユーザーを獲得するという経験、そこからリアクションをもらうという経験は重要です
    - 想定通りの部分、逆にそうではない部分を知る必要があります。
    - 課題設定の答え合わせには結局のところユーザーが必要になります。
- 自分が使える
    - 使うつもりのないポートフォリオを作るのは楽しくありません

このすべての要素を満たしているのがChrome拡張機能開発です。

### 短期間で作れる

Chrome拡張機能は既存のサービスに対する改編や便利機能の提供であれば1からサービスのすべてを作るよりも高速に行えます。
実際サービスに後からジョインしたデベロッパーの一人の気分で、新機能やUX向上を行えます。

### 程よいプログラミング技術で作れる

chrome拡張機能の開発に必要なのは、javascriptやhtml、cssの基礎を除けばさほど多くはありません。
chrome拡張機能を作るために必要なmanifestファイルの書き方やちょっとしたお作法、機能について知っておけば十分に開発が始められます。

仮に、javascriptの基礎ができているのであれば、入門向けの記事を1日2日読めば十分に通用します。

### ゼロから課題そのものを設定する体験ができる

課題設定はプログラミングのロードマップが整備された今、忘れがちな要素です。
同時に、現場で最も必要とされる要素でもあります。

実際に新サービス開発で課題設定力が必要になるというのは想像しやすいと思いますが、
ユーザーの抱える課題を分析し、問題として定義する営みは機能改善やオペレーション、テストなどあらゆるポジションで必要なスキルです。

### 既存の市場やサービス、技術の分析を行える

既存のサービスの拡張やブラウザの便利機能を作ろうと思えば、自らのウェブ体験を整理し、不便なもの心地よい体験を整理する必要があります。

特に、既存のサービスのあら捜しをして、正しく課題化する体験はエンジニアに求められるスキルの一つであり、意図的に行なっていかないと身につかないスキルでもあります。


### 成果を公開してユーザーに使ってもらえる

chrome ウェブストアに公開するためには500円の登録料とストア用の作文や画像を用意するだけです。
パーミッションや資料を適切に用意していれば、審査に落ちる可能性は低いです。

比較的安価にユーザーに触ってもらえます。
また、課題設定によってはサーバーの維持コストなどはかかりません。

ユーザーのリアクションや、そもそものユーザー数が想定通りなのか。
ユーザーを獲得するために初動はどんな取り組みが必要なのかを学ぶ良い機会です。

### 自分で使える

ブラウザさえあれば、自分で使う事ができます。
『自分でさえ使い続けない＝何かしらの問題があって使わない』という体験ができます。

実際のところユーザー視点を得るためには自分でサービスを使い続け、「このサービスは自分の子供」という意識が薄れたときにはじめて開眼することも多いのです。

Chromeにインストールし続けていて、『邪魔だな・・・』と思えるのは大切な要素です。

## まとめ

課題を設定するのには慣れが必要です。

逆に慣れてくると、直したい世間の課題を山ほど見つけてしまい、いろんなプログラムを書きたくなります！
私はこの記事を書きながら、「Qiitaのマークダウンエディタもユーザー視点に立ってみるとHackMDにあるような便利な機能（ボタンを押すと太文字になるとか、、、）が足りないな・・・」とかすぐに思ってしまいましたｗ

皆さんも修行のためにぜひ、Chrome拡張機能を作ってみてください。