あなたがどれだけつぶしが効くのかを調べるツールを作った

## はじめに

同僚から言われた「つぶしが効く技術を身に付けたい」と言われてつぶしが効くってなんだろう？と思ったので、ちょっと検索ツールを作ってみました。

## つぶしが効くとは？

デジタル大辞泉より。

>金属製品は、溶かして別の物にすることができるところから》それまでの仕事をやめても、他の仕事ができる能力がある。「専門職すぎて―・かない」

こういわれると、**「今世の中に幅広く需要がある技術を持っているか？」**という見方の他に、**「今後伸びていく技術・必要な技術を身に付けることが出来るか？」**というような見方も出来る気がしますね。特に日進月歩のIT業界では、後者に貪欲な姿勢が大事な気がします。

そんな感じで禅問答してもしょうがないので、とりあえずはわかりやすく**「今世の中に幅広く需要がある技術を持っているか？」**という観点で、とりあえずツールを作ってみました。

## つぶしが効くか調べる

各サイトに乗っている自身の技術情報の比率から、つぶしが効く力を測定します。
一般枠でGoogle先生、業務枠でフリーランスエージェントのレバテックさん、趣味枠でQiita氏の最新情報を元に算出しています。

```
$ python3.6  main.py '["C言語", "Python"]'
あなたのプログラム超人パワーを測定します。
一般目線:549.77万パワー
業界目線:108.15万パワー
趣味目線:89.29万パワー
```

ツールは以下。

https://github.com/developer-kikikaikai/search_lang_demand_amount

- 動作確認環境

環境: Python 3.6 + bs4モジュール

```
pip3 install bs4
```

OS: Windows 10, Linux Ubuntu 18.04

## 中身について

### 調べ方

Webサイトを検索して、業界全体の何パーセント自分の技術が該当するかを調べているだけです。
Googleなら"プログラミング言語"+キーワードで検索してみて検索トップで出てくる「約XXXX件」ってやつが自分のヒット数。全体はプログラミング言語"で計算するみたいな感じ。
bs4のBeautifulSoupが使いやすかったのでHTTP responseのHTMLパースに利用しています。

```python:src/HTTPScraping.py
    html = requests.get(url).text.encode('utf-8')
    # BeautifulSoupで扱えるようにパースします
    soup = BeautifulSoup(html, "html.parser")
    # idの要素を表示
    return soup.select_one(f"#{id}").text
```

また、Qiitaだけは[QiitaAPI利用ツール](https://qiita.com/developer-kikikaikai/items/646e9f1ca8e1475e2dec)を使い、最新5000件のうち何件に指定技術を含むタグがついているかで計算しています。

### Selenium + Google Chromeも試してみた

ツールを作ってみた目的の一つとして、「Webスクレイピングを試してみたかった」という理由があったので、[参考記事](https://qiita.com/Azunyan1111/items/9b3d16428d2bcc7c9406)を元に以下も試してみました。
`SeleniumScraping.get_instance().scraping("https://XXX", "html_id")`でHTML内の特定ID情報を抽出できます。

```src/SeleniumScraping.py
class SeleniumScraping:

    #singleton instance
    _instance = None

    def __init__(self):
        # ブラウザのオプションを格納する変数をもらってきます。
        options = Options()
        # Headlessモードを有効にする（コメントアウトするとブラウザが実際に立ち上
がります）
        options.add_argument('--headless')
        # ブラウザを起動する
        self._driver = webdriver.Chrome(chrome_options=options)

    @classmethod
    def get_instance(self):
        if not self._instance:
            self._instance = self()
        return self._instance

    def scraping(self, url, id):
        try:
            # ブラウザでアクセス
            self._driver.get(url)
            # HTMLを文字コードをUTF-8に変換してから取得
            html = self._driver.page_source.encode('utf-8')
            # BeautifulSoupで扱えるようにパースします
            soup = BeautifulSoup(html, "html.parser")
            # idの要素を表示
            return soup.select_one(f"#{id}").text
        except:
            return ""
```

試してみてわかったメリットデメリット。今回作ったツールで欲しい情報はHTMLの1 id内情報だけなので、メリットを活かせず。
BeautifulSoupだけで十分でした。

メリット

- JavaScriptの実行結果が取得出来たりと、自由度が高い

デメリット

- ちょっと重い
- root権限では使えない
- SSHで使用できない

また、動作には以下も必須です。多分Google Chromeも必要(あるなしでの動作差分は未検証)

```
#libgconf
apt install libgconf-2-4
#selenium
pip3 install selenium

#chromedriver
wget https://chromedriver.storage.googleapis.com/2.29/chromedriver_linux64.zip
unzip chromedriver_linux64.zip
cd chromedriver
sudo mv chromedriver /usr/local/bin/
```

Qiitaの通知一覧検索なんかにも使えるかなと思ってSelenium + Google Chromeを触ってみたのですが、簡単には作れなさそうなのでとりあえず棚上げしています。

## 最後に

ただHTTPレスポンス結果の数字を抽出しただけですが、数字が見えるだけでちょっと楽しいですね。
どうせならDjango辺りを調べてみてWeb化してみたい。

## 参考

[Python Webスクレイピング 実践入門](https://qiita.com/Azunyan1111/items/9b3d16428d2bcc7c9406)
次触る時は色々弄り倒したいと思います。