20201015のHTMLに関する記事は5件です。

rails 新規アプリケーション立ち上げコマンド

Ruby on Railsでの新規アプリケーション立ち上げ方法

自分に向けて記憶の範囲内だけでアウトプットします!

ターミナル
rails _6.0.0_ new test -d mysql

ターミナル
rails db:create

ターミナル
rails g model test

db/migrate/2020・・・・・
t.string :name, null: false (ここの行の記述は適当)

ターミナル
rails db:migrate

config/routes.rb
root to tests#index (ここの行も適当)

ターミナル
rails g controller tests

app/controller/tests.controller.rb
def index
  @tests = Test.all
end

database.yml
utf8○○・・・の箇所をutf8のみにする

app/views/index.html.erb
ここにHTMLを記述する

以上!

ここまで全て記憶内で書いてみました。足りないところや間違っているところもあると思いますが、私自身は間違っているところがあればエラー見ればわかるのでこれを参考にする方は100%信じきらないでください!

現場からは以上です!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

文春オンラインの記事をスクレイピングして、ネガポジ分析を行います

スクレイピングとは

スクレイピングを利用することでネット上の様々な情報を取得することができます。
今回はPythonのコードを利用して記事を取得しています。
BeautifulSoupなどを利用して、HTMLやCSSの情報を指定して情報を抽出します。

ネガポジ分析について

記事の内容がネガティブなのかポジティブなのかを単語感情極性対応表を基準にして数値化してみようと思います。
単語感情極性対応表は単語に対してネガポジ度を-1〜1で定義してあります。

喜び:よろこび:名詞:0.998861
厳しい:きびしい:形容詞:-0.999755

などです。

参考文献

スクレイピングはudemy講座を利用しました。
ネガポジ分析はこちらの記事を参考にさせていただきました。
また、今回分析対象としたのは文春オンラインです。

では作業に取り掛かりましょう。
まずは必要なライブラリをインポートします。

import requests
from bs4 import BeautifulSoup
import re
import itertools
import pandas as pd, numpy as np
import os
import glob
import pathlib
import re
import janome
import jaconv
from janome.tokenizer import Tokenizer
from janome.analyzer import Analyzer
from janome.charfilter import *

まずはスクレイピングの準備です。

URLを取得してrequestsBeautifulSoupを適用します。

url = "https://bunshun.jp/" # urlに文春オンラインのリンクを格納
res = requests.get(url) # requests.get()を用いてurlをresに格納
soup = BeautifulSoup(res.text, "html.parser") # ここでBeautifulSoupを用いてスクレイピングの準備ができました。

記事一覧を取得して、タイトルとURLを取得

基本的には記事がli要素として並んでおり、その親要素はulであるというパターンが多いです。
for文を使って記事一覧からタイトルとURLを取得しています。

elems = soup.select("ul") # 記事のリストがli要素として並んでいたので、その親要素であるulを指定しています。
title_list = [] # 記事のタイトルを格納するリスト
url_list = [] # 記事のURLを格納するリスト
for sibling in elems[3]: # elems[3]に欲しいリストがありました。このfor分により記事のリストから記事のタイトルとURLを取得し、それぞれリストに格納します。
    if sibling != "\n": # 改行が含まれていたので除外
        print(sibling.h3.string) # タイトルはh3タグに入っていました。
        title_list.append(sibling.h3.string.replace('\u3000', ' ')) # \u3000が入っている部分があったので空白に変換
        print(url + sibling.h3.a["href"]) # aタグのhref属性にリンクが格納されていました。
        url_list.append(url + sibling.h3.a["href"]) # 上記で取得したurl以下の部分が格納されていたので足しています。
ジャニーズ元MADEリーダー・稲葉光(29)が元Berryz工房アイドルと“渋谷ホテルデート”《スクープ撮》
https://bunshun.jp//articles/-/40869
「駅近、約1,200㎡の広大な敷地」「自宅の建て替えと地域貢献を両立する土地活用」プロが出した答えとは?
https://bunshun.jp//articles/-/40010
「365日24時間働こう」……ワタミの“思想教育”はいまも続いていた
https://bunshun.jp//articles/-/40843
“縦割り行政”の弊害だ! 橋下徹が語る「Go Toキャンペーンは何が間違っているのか」
https://bunshun.jp//articles/-/40877
警察官に唾吐き公務執行妨害で逮捕 読売新聞がソウル支局記者を懲戒処分
https://bunshun.jp//articles/-/40868
同性愛差別の足立区議宛てに「とんでもない思い違いです」…81歳祖母の手紙が教えてくれたこと
https://bunshun.jp//articles/-/40826
家系ラーメン“のれん分け戦争”「吉村家vs.六角家」裏切りと屈服の黒歴史〈六角家破産〉
https://bunshun.jp//articles/-/40752
《平手派また卒業》欅坂46・佐藤詩織が書いた「活動のなかで悲しかったこと」 櫻坂46の“急勾配”を運営も懸念
https://bunshun.jp//articles/-/40862
安倍政権最大の功績は“アイヌ博物館”だった? 200億円をブチ込んだ「ウポポイ」の虚実
https://bunshun.jp//articles/-/40841
「長さ」ではなく…美容師が教える、髪を切るときに言うといい「意外な言葉」
https://bunshun.jp//articles/-/40694

記事は1ページでは終わらない場合があります。1ページずつ遷移してリンクを取得します。

リンク一覧を作成するために、while文を作って次のページが表示されていればそのURLを取得してページに遷移し、遷移したページにも次のページへのリンクがあれば取得して遷移するというループを回します。
こうすることにより、1タイトルのニュースに関する全てのページに関するリンク一覧を作成できます。

news_list = [] # 全てのニュース記事のリンクをここに格納します。
for pickup_link in url_list: # このfor文でURLリストからURLを取り出します。
    news = [] # ニュース記事はページごとに分かれているため、このリストに各ページのリンクを格納します。
    news.append(pickup_link) # 最初のリンクを格納
    pickup_res = requests.get(pickup_link) # requests.get()を用いてリンクからページを取得
    pickup_soup = BeautifulSoup(pickup_res.text, "html.parser") # BeautifulSoupを適用
    while True: # このwhile文では次のページへのリンクがあればそのリンクを取得し、そのページへ遷移するというループを回します。
        try: # 遷移した先で次のページへのリンクがあれば永遠にこのループを繰り返します。
            next_link = pickup_soup.find("a", class_="next menu-link ga_tracking")["href"] # next menu-link ga_trackingというクラスを持つaタグのhref属性が次のページへのリンクでした。
            next_link = url + next_link
            next_res = requests.get(next_link) # requests.get()とBeautifulSoupを用いて遷移先のページ情報を取得します。
            pickup_soup = BeautifulSoup(next_res.text, "html.parser")
            news.append(next_link) # newsに各ページ情報を追加します。
        except Exception: # 次のページへのリンクが無ければここの処理が行われます。
            news_list.append(news) # タイトル内の全ての記事をURLがnewsに格納されたのでそれをnews_listに格納します。
            break
display(news_list) # 作成したURLリストを表示します。
[['https://bunshun.jp//articles/-/40869',
  'https://bunshun.jp//articles/-/40869?page=2',
  'https://bunshun.jp//articles/-/40869?page=3',
  'https://bunshun.jp//articles/-/40869?page=4'],
 ['https://bunshun.jp//articles/-/40010',
  'https://bunshun.jp//articles/-/40010?page=2'],
 ['https://bunshun.jp//articles/-/40843',
  'https://bunshun.jp//articles/-/40843?page=2',
  'https://bunshun.jp//articles/-/40843?page=3',
  'https://bunshun.jp//articles/-/40843?page=4'],
 ['https://bunshun.jp//articles/-/40877',
  'https://bunshun.jp//articles/-/40877?page=2'],
 ['https://bunshun.jp//articles/-/40868',
  'https://bunshun.jp//articles/-/40868?page=2'],
 ['https://bunshun.jp//articles/-/40826',
  'https://bunshun.jp//articles/-/40826?page=2',
  'https://bunshun.jp//articles/-/40826?page=3',
  'https://bunshun.jp//articles/-/40826?page=4'],
 ['https://bunshun.jp//articles/-/40752',
  'https://bunshun.jp//articles/-/40752?page=2',
  'https://bunshun.jp//articles/-/40752?page=3',
  'https://bunshun.jp//articles/-/40752?page=4'],
 ['https://bunshun.jp//articles/-/40862',
  'https://bunshun.jp//articles/-/40862?page=2',
  'https://bunshun.jp//articles/-/40862?page=3'],
 ['https://bunshun.jp//articles/-/40841',
  'https://bunshun.jp//articles/-/40841?page=2',
  'https://bunshun.jp//articles/-/40841?page=3',
  'https://bunshun.jp//articles/-/40841?page=4',
  'https://bunshun.jp//articles/-/40841?page=5'],
 ['https://bunshun.jp//articles/-/40694',
  'https://bunshun.jp//articles/-/40694?page=2',
  'https://bunshun.jp//articles/-/40694?page=3',
  'https://bunshun.jp//articles/-/40694?page=4']]

先ほどのコードでURLリストを作成できたので、そのリンクを辿って記事本文を取得していきます。

.textを適用することで本文のみを取得できるのですが、細かくfor文を回して.textを適用しています。
そのためいくつかの空文字(or空リスト)を作成して格納しながら本文を格納したリストを作成していきました。

news_page_list = [] # ここに全ての記事の本文を格納します。
for news_links in news_list: # このfor文でURLのリストからあるタイトルのリンクリストを取り出します。
    news_page = '' # ここに各ページから取得した本文を追加していきます。
    for news_link in news_links: # タイトルのリンクリストからリンクを一つずつ取り出します。
        news_res = requests.get(news_link) # requests.get()とBeautifulSoupを利用して記事の情報を取得します。
        news_soup = BeautifulSoup(news_res.text, "html.parser") 
        news_soup = news_soup.find(class_=re.compile("article-body")).find_all("p") # article-bodyというidを持つタグの直下のpタグに本文が格納されていました。
        news_phrase = '' # そのページの本文のフレーズを格納
        for news in news_soup: # for文で回すことでtextを適用して本文フレーズのみを取得できました。
            news_phrase += news.text.replace('\u3000', ' ') # 取得したフレーズを追加。文字列なので+で追加できました。
        news_page += news_phrase # 1ページ分のフレーズが取得できらたらnew_pageに追加
    news_page_list.append(news_page) # 一つのタイトルに対する全ての本文がnew_pageに格納されたらnews_page_listに追加。これはリスト型なのでappendを使用。
for i in range(1, 4): # 取得した本文の一部を表示してみます。うまく取得できたようです。
    print("<%s>" % i, news_page_list[i][:500], end="\n\n")
<1> 多くの土地オーナーから「土地活用のパートナー」として選ばれ続けている三井ホーム。土地活用のプロフェッショナルである同社営業担当者へのインタビューを通じ、三井ホームがパートナーとして選ばれる理由をひも解く本企画。今回は、東京都府中市にある約1,200㎡にも及ぶ広大な自宅敷地を、医院+賃貸住宅+自宅と保育所の計2棟に建て替えた事例を紹介する。本件を担当した東京コンサルティング営業部 東京西エリア 営業グループ長の西嶋俊人氏に話を聞いた。 都心から西に延びる京王線の最寄駅から徒歩約5分の場所に、戦前から続く大地主の自宅があった。敷地面積は約1,200㎡。築約50年の自宅は老朽化が進み、建て替えを検討する必要があった。 70代のオーナーさまは、この地に代々続く地主のご一族で、自宅周辺にも複数の賃貸マンションを所有されている方です。老朽化した築約50年の自宅などの建て替えを機に、約1,200㎡にも及ぶ広大な敷地を有効活用しようというのが今回のプロジェクトの発端です。 銀行から弊社に相談が持ち込まれたのが2018年初め。まず自宅+賃貸住宅というプランを持ってオーナーさまにお会いしました。するとオー

<2>  ワタミ株式会社の労働問題に関する告発が続いている。10月2日、「ワタミの宅食」営業所の所長が、労働基準監督署からの残業代未払いの是正勧告、月175時間を超える長時間労働、上司によるタイムカードの改ざんを次々と公表したのだ。「ホワイト企業」宣伝のワタミで月175時間の残業 残業代未払いで労基署から是正勧告ワタミがホワイト企業になれなかった理由は? 勝手に勤怠「改ざん」システムも Aさんは長時間労働の末、昼夜の感覚がなくなり、「このまま寝たら、もう目が覚めないのではないか」と恐怖を抱きながら生活するほどだった。「あのまま働いていたら、死んでいた」とAさんは断言する。現在は、精神疾患を発症し、労災申請をしながら休業中だ。 しかし、Aさんは命の危険を感じていながら、なぜ過酷な仕事を続けてしまったのだろうか。その背景には、労働者の意識に働きかけ、過酷な労働を受け入れさせてしまう、ワタミによる「思想教育」のシステムがあった。「こんなにいい仕事をしているんだから、苦しくても頑張ろう」「苦しいことも、苦しくない。むしろ自分の力になる」 Aさんは過重労働の最中、そう自分に言い聞かせていた。 実際、Aさ

<3> 「規制改革」「行政改革」「縦割り打破」。 菅義偉政権発足後、「改革」という言葉がよく聞こえてくるようになった。菅首相は9月16日の就任記者会見でも「規制改革を政権のど真ん中に置く」と宣言している。この「改革」によって、日本はどのように変わるのだろうか――。 菅首相と親交の深い橋下徹氏が、「文藝春秋」11月号のインタビューで菅政権の「改革」が目指すところを語った。 橋下氏は自身の経験から、「改革」を進めていくためには「おかしい」と言える感覚を持つことが重要だと語る。「“改革力”というのは、常に身の回りのことにアンテナを張って、『これはおかしい』と感じたら、すぐに口に出すことがものすごく重要です。そうしてその都度直していく。その繰り返しです。 僕が知事・市長だった時も、そのような作業の連続でした。 例えば、公用車に乗ったらマガジンラックに新聞5紙がバサッと差し込まれているんですよ。庁舎に着くまでにニュースをチェックできるからいいんですけど、知事室に入ったら机の上に5紙が、知事応接室に行ったらまた5紙……。『公用車の新聞をそのまま知事室に持っていけばいいじゃないか』『どうなってるんや、この新

スクレイピングによって得た、今までの情報を一つのDataFrameに格納します。

こうすることでデータが見やすくなるだけでなく、扱いやすくなります。
ここまでできればあとはデータを加工してネガポジ分析をするだけです!

new_no_list = [x for x in range(len(title_list))] # あとで使うのでニュースNo.を作成
newslist = np.array([new_no_list, title_list, url_list, news_page_list]).T # DataFrameに格納する準備として、np.arrayのリストに格納して転置しておく。
newslist = pd.DataFrame(newslist, columns=['ニュースNo.', 'title', 'url', 'news_page_list']) # カラム名を指定してDataFrameに格納
newslist = newslist.astype({'ニュースNo.':'int64'}) # あとでテーブルを結合するためにニュースNo.をint64型に変換
display(newslist)
ニュースNo. title url news_page_list
0 0 ジャニーズ元MADEリーダー・稲葉光(29)が元Berryz工房アイドルと“渋谷ホテルデート... https://bunshun.jp//articles/-/40869 ジャニーズJr.内の人気ユニット「宇宙Six」の山本亮太(30)が違法な闇スロット店に通っ...
1 1 「駅近、約1,200㎡の広大な敷地」「自宅の建て替えと地域貢献を両立する土地活用」プロが出し... https://bunshun.jp//articles/-/40010 多くの土地オーナーから「土地活用のパートナー」として選ばれ続けている三井ホーム。土地活用のプ...
2 2 「365日24時間働こう」……ワタミの“思想教育”はいまも続いていた https://bunshun.jp//articles/-/40843 ワタミ株式会社の労働問題に関する告発が続いている。10月2日、「ワタミの宅食」営業所の所長...
3 3 “縦割り行政”の弊害だ! 橋下徹が語る「Go Toキャンペーンは何が間違っているのか」 https://bunshun.jp//articles/-/40877 「規制改革」「行政改革」「縦割り打破」。 菅義偉政権発足後、「改革」という言葉がよく聞こえて...
4 4 警察官に唾吐き公務執行妨害で逮捕 読売新聞がソウル支局記者を懲戒処分 https://bunshun.jp//articles/-/40868 読売新聞ソウル支局の記者(34)が7月中旬、公務執行妨害の容疑で韓国当局に逮捕されていたこ...
5 5 同性愛差別の足立区議宛てに「とんでもない思い違いです」…81歳祖母の手紙が教えてくれたこと https://bunshun.jp//articles/-/40826 「おばあちゃんが足立区議の件で怒っていて、手紙を書くらしい」  母からこんなLINEが来たの...
6 6 家系ラーメン“のれん分け戦争”「吉村家vs.六角家」裏切りと屈服の黒歴史〈六角家破産〉 https://bunshun.jp//articles/-/40752 「『六角家』は破産しましたが、ジャンルとしての『家系ラーメン』は、年々店舗数が拡大しており、...
7 7 《平手派また卒業》欅坂46・佐藤詩織が書いた「活動のなかで悲しかったこと」 櫻坂46の“急勾... https://bunshun.jp//articles/-/40862 《皆さんこんばんは。今日はいつも応援して頂いている皆様にお伝えしたいことがあります。私、佐藤...
8 8 安倍政権最大の功績は“アイヌ博物館”だった? 200億円をブチ込んだ「ウポポイ」の虚実 https://bunshun.jp//articles/-/40841 ──本当にあれでいいんだろうか? 帰路、雨の道央道をレンタカーでひた走りながら、そんな思いが...
9 9 「長さ」ではなく…美容師が教える、髪を切るときに言うといい「意外な言葉」 https://bunshun.jp//articles/-/40694 掛け布団がだんだん心地よくなってきた、今日この頃。朝夜の急激な気温差に、薄めの上着を羽織っ...

ネガポジの判断基準には「単語感情極性対応表」を使用します。

この「単語感情極性対応表」を分析で使用するための形に整えます。

p_dic = pathlib.Path('/work/dic') # workディレクトリのdicフォルダにパスを通します。ここに「単語感情極性対応表」のファイルを置いています。

for i in p_dic.glob('*.txt'): # 該当のファイルを見つけます。
    with open (i, 'r', encoding='utf-8') as f:
        x = [i.replace('\n', '').split(':') for i in f.readlines()] # 1行ずつ読み込みます。

posi_nega_df = pd.DataFrame(x, columns = ['基本形', '読み', '品詞', 'スコア']) # 読み込んだデータをDataFrameに格納します。
posi_nega_df['読み'] = posi_nega_df['読み'].apply(lambda x : jaconv.hira2kata(x)) # 平仮名をカタカナに変換(同じ読みのものが含まれており、重複を無くす為のようです。)
posi_nega_df = posi_nega_df[~posi_nega_df[['基本形', '読み', '品詞']].duplicated()] # 重複を削除します。
posi_nega_df.head()
基本形 読み 品詞 スコア
0 優れる スグレル 動詞 1
1 良い ヨイ 形容詞 0.999995
2 喜ぶ ヨロコブ 動詞 0.999979
3 褒める ホメル 動詞 0.999979
4 めでたい メデタイ 形容詞 0.999645

記事本文を形態素解析して分析に利用できる形にします。

形態素解析にはTokenizer()UnicodeNormalizeCharFilter()を利用します。
単語、基本形、品詞、読みを取り出してDataFrameに格納します。
そして、記事のDataFrameと「単語感情極性対応表」をマージして、記事に含まれるワードをスコア化します。
下記にその表を示しています。
「人気」という単語が高いスコアを示していますのでポジティブな単語だと判断されました。
他の単語はなぜそのスコアになったんだ?というものもありますが、気にせず進みましょう。

i = 0 # このiはニュースNo.を取得する際に利用します。

t = Tokenizer()
char_filters = [UnicodeNormalizeCharFilter()]
analyzer = Analyzer(char_filters=char_filters, tokenizer=t)

word_lists = []
for i, row in newslist.iterrows(): # iを一つずつ増やしていきニュースNo.とします。
    for t in analyzer.analyze(row[3]): # 取り出したレーベルの3カラム目に本文が格納されています。
        surf = t.surface # 単語
        base = t.base_form # 基本形
        pos = t.part_of_speech # 品詞
        reading = t.reading # 読み

        word_lists.append([i, surf, base, pos, reading]) # word_listsに追加
word_df = pd.DataFrame(word_lists, columns=['ニュースNo.', '単語', '基本形', '品詞', '読み'])
word_df['品詞'] = word_df['品詞'].apply(lambda x : x.split(',')[0]) # 品詞は複数格納されるが最初の1つのみ利用
display(word_df.head(10)) # 作成した本文のテーブルを表示
print("↓↓↓↓↓↓↓単語感情極性対応表とマージ↓↓↓↓↓↓↓")
score_result = pd.merge(word_df, posi_nega_df, on=['基本形', '品詞', '読み'], how='left') # 本文のテーブルと単語感情極性対応表をマージ
display(score_result.head(10)) # 作成したスコアテーブルを表示。「人気」という単語のスコアが高いのは分かるが他は微妙、、、
ニュースNo. 単語 基本形 品詞 読み
0 0 ジャ ジャ 名詞 ジャ
1 0 ニーズ ニーズ 名詞 ニーズ
2 0 Jr Jr 名詞 *
3 0 . . 名詞 *
4 0 名詞 ナイ
5 0 助詞
6 0 人気 人気 名詞 ニンキ
7 0 ユニット ユニット 名詞 ユニット
8 0 記号
9 0 宇宙 宇宙 名詞 ウチュウ
↓↓↓↓↓↓↓単語感情極性対応表とマージ↓↓↓↓↓↓↓
ニュースNo. 単語 基本形 品詞 読み スコア
0 0 ジャ ジャ 名詞 ジャ NaN
1 0 ニーズ ニーズ 名詞 ニーズ -0.163536
2 0 Jr Jr 名詞 * NaN
3 0 . . 名詞 * NaN
4 0 名詞 ナイ -0.74522
5 0 助詞 NaN
6 0 人気 人気 名詞 ニンキ 0.96765
7 0 ユニット ユニット 名詞 ユニット -0.155284
8 0 記号 NaN
9 0 宇宙 宇宙 名詞 ウチュウ -0.515475
result = []
for i in range(len(score_result['ニュースNo.'].unique())): # ニュースNo.を利用してfor文を回します。
    temp_df = score_result[score_result['ニュースNo.']== i]
    text = ''.join(list(temp_df['単語'])) # 1タイトル無いの全ての単語をつなげる。
    score = temp_df['スコア'].astype(float).sum() # 1タイトル内のスコアを全て足し合わせる。➡︎累計スコア
    score_r = score/temp_df['スコア'].astype(float).count() # 本文の長さに影響されないように単語数で割り算する。➡︎標準化スコア
    result.append([i, text, score, score_r])

ranking = pd.DataFrame(result, columns=['ニュースNo.', 'テキスト', '累計スコア', '標準化スコア']).sort_values(by='標準化スコア', ascending=False).reset_index(drop=True) # 標準化スコアで並び替えてDataFrameに格納
ranking = pd.merge(ranking, newslist[['ニュースNo.', 'title', 'url']], on='ニュースNo.', how='left') # ニュースNo.基準でマージする。タイトルとURLを追加する。
ranking = ranking.reindex(columns=['ニュースNo.', 'title', 'url', 'テキスト', '累計スコア', '標準化スコア']) # カラムを並び替え
display(ranking)
ニュースNo. title url テキスト 累計スコア 標準化スコア
0 6 家系ラーメン“のれん分け戦争”「吉村家vs.六角家」裏切りと屈服の黒歴史〈六角家破産〉 https://bunshun.jp//articles/-/40752 「『六角家』は破産しましたが、ジャンルとしての『家系ラーメン』は、年々店舗数が拡大しており、... -238.437124 -0.408983
1 1 「駅近、約1,200㎡の広大な敷地」「自宅の建て替えと地域貢献を両立する土地活用」プロが出し... https://bunshun.jp//articles/-/40010 多くの土地オーナーから「土地活用のパートナー」として選ばれ続けている三井ホーム。土地活用のプ... -315.299051 -0.438524
2 7 《平手派また卒業》欅坂46・佐藤詩織が書いた「活動のなかで悲しかったこと」 櫻坂46の“急勾... https://bunshun.jp//articles/-/40862 《皆さんこんばんは。今日はいつも応援して頂いている皆様にお伝えしたいことがあります。私、佐藤... -136.887378 -0.447344
3 5 同性愛差別の足立区議宛てに「とんでもない思い違いです」…81歳祖母の手紙が教えてくれたこと https://bunshun.jp//articles/-/40826 「おばあちゃんが足立区議の件で怒っていて、手紙を書くらしい」 母からこんなLINEが来たの... -213.244051 -0.460570
4 9 「長さ」ではなく…美容師が教える、髪を切るときに言うといい「意外な言葉」 https://bunshun.jp//articles/-/40694 掛け布団がだんだん心地よくなってきた、今日この頃。朝夜の急激な気温差に、薄めの上着を羽織った... -192.702889 -0.475810
5 8 安倍政権最大の功績は“アイヌ博物館”だった? 200億円をブチ込んだ「ウポポイ」の虚実 https://bunshun.jp//articles/-/40841 ──本当にあれでいいんだろうか? 帰路、雨の道央道をレンタカーでひた走りながら、そんな思いが... -483.393151 -0.476719
6 0 ジャニーズ元MADEリーダー・稲葉光(29)が元Berryz工房アイドルと“渋谷ホテルデート... https://bunshun.jp//articles/-/40869 ジャニーズJr.内の人気ユニット「宇宙Six」の山本亮太(30)が違法な闇スロット店に通って... -196.888853 -0.479048
7 3 “縦割り行政”の弊害だ! 橋下徹が語る「Go Toキャンペーンは何が間違っているのか」 https://bunshun.jp//articles/-/40877 「規制改革」「行政改革」「縦割り打破」。 菅義偉政権発足後、「改革」という言葉がよく聞こえて... -94.718989 -0.480807
8 4 警察官に唾吐き公務執行妨害で逮捕 読売新聞がソウル支局記者を懲戒処分 https://bunshun.jp//articles/-/40868 読売新聞ソウル支局の記者(34)が7月中旬、公務執行妨害の容疑で韓国当局に逮捕されていたこと... -144.916148 -0.489582
9 2 「365日24時間働こう」……ワタミの“思想教育”はいまも続いていた https://bunshun.jp//articles/-/40843 ワタミ株式会社の労働問題に関する告発が続いている。10月2日、「ワタミの宅食」営業所の所長が... -321.838102 -0.528470
print("<<ポジティブ1位>>", end="\n\n")
for i in range(1, 4):
    print(ranking.iloc[0, i])
<<ポジティブ1位>>

家系ラーメン“のれん分け戦争”「吉村家vs.六角家」裏切りと屈服の黒歴史〈六角家破産〉
https://bunshun.jp//articles/-/40752
「『六角家』は破産しましたが、ジャンルとしての『家系ラーメン』は、年々店舗数が拡大しており、今が最盛期です。その背景には“資本系”の台頭があります。でもね、確かに資本系も美味しいんですが、かつて『六角家』や『吉村家』の職人たちが日々、味の改良に挑み、切磋琢磨して、互いに覇を競っていたあの時代が、倒産のニュースを聞いた今、妙に懐かしく輝いて見えるんです」(ラーメン評論家・山本剛志氏)(前編「家系ラーメン・名門『六角家』はなぜ破産したか」を読む) 2020年9月4日、かつて家系ラーメンの「代名詞」とまで呼ばれ、一世を風靡した老舗の名店「六角家」が、横浜地裁より破産手続き開始決定を受けていると報じられた。2017年に「六角家」の本店が閉じられ、倒産は時間の問題だったとみるファンも多かったが、いざこのニュースが流れると「マジか」「もう一度食べたかった」など、その倒産を惜しむ声がネット上などで多く上がった。そして、冒頭の山本氏のように、「六角家」がこれまで「家系ラーメン」業界の隆盛にはたした役割について、再評価する声も上がってきている。「そもそも、家系ラーメンが誕生したのは1974年。長距離トラックの運転手だった吉村実氏が仕事の合間に趣味で密かに研究を重ねていた九州の豚骨ベースと東京の醤油ベースを組み合わせたスープを開発したことに端を発しています。この味ならいける! と判断した吉村氏はその後会社を辞め、『吉村家』というラーメン店を横浜の磯子区新杉田に開店。豚骨醤油ベースの風味豊かなスープと、モッチリとした『酒井製麺』の太麺を合わせた1杯は、本人の読みどおり大きな人気を集め、店は日々、大勢のお客さんで賑わいました。 評判を集めた「吉村家」には、多くの才能が集まりました。そして、吉村氏の元で修業をした弟子たちは、吉村氏直々に教わり技術を身に着けると“暖簾分け”という形で自分の店を持つようになり、弟子たちの店もそれぞれのエリアで大人気店となりました。独立した弟子たちが店名に『~家』とつけることが多かったため、ファンの間で、『吉村家』とそこから独立した店は『家系』と呼ばれるようになりました。現在は、“家系皆伝”という証書を吉村氏からもらった店舗のみが吉村家の“直系店舗”として認められています」(ラーメン探究家・田中一明氏) 直系店舗にはいくつか特徴がある。まずは、麺は、酒井製麺所という製麺所から卸している麺でなければならない。『家系といえば酒井製麺』と言われるほどその結びつきは固く、酒井製麺の麺は中太でモチモチした独特の食感があるという。また、麺は寸胴で茹で、テボザルではなく平ザルですくい上げるのも特徴だ。 その直系店鋪以外で、酒井製麺所の麺を使っていたのが今回倒産した「六角家」と、「本牧家」だった。「『六角家』は、吉村氏の一番弟子である神藤隆氏が独立して横浜市神奈川区六角橋で始めた店です。一時は本家『吉村家』や吉村氏が横浜市中区に出したのれん分け1号店である『本牧家』とともに家系御三家と言われたほどの超有名店です。ただ、『六角家』は吉村氏の一番弟子が始めた店にもかかわらず、開店当初から今日まで、一度も吉村氏から吉村家の“直系店舗”として認められたことはありません。『吉村家』と『六角家』はずっとぎくしゃくした関係が続いていたのです」(食ジャーナリスト・小林孝充氏) 一体なぜなのか。ラーメン探究家の田中一明氏が解説する。「吉村氏は1974年に横浜市磯子区新杉田に『吉村家』1号店を開いた後、12年間は支店をつくりませんでしたが、1986年満を持して横浜市中区本牧に2号店である『本牧家』をオープンさせました。この店を弟子の神藤隆氏に任せ、吉村氏はオーナーとして、いよいよ店舗の拡大へと乗り出したかのように見えました。ところがその2年後、店主の神藤氏が従業員を引き連れ、本牧家を出て行ってしまったのです。さらにその後、神藤氏は神奈川区六角橋に自ら『六角家』を開店しました。一方、神藤氏という主を失った『本牧家』は一時期休業を余儀なくされてしまったのです。 なぜ神藤氏は独立したのかについては、当時様々な憶測が飛び交いましたが、私は目指す味の方向性が違っていたことが大きな理由だと思っています。『吉村家』が醤油ダレをガツンと効かせたパンチのあるタイプであるのに対し、『六角家』は豚骨と醤油ダレをバランス良く効かせた食べ手を選ばないタイプであるのが特徴。神藤さんは自ら信じる味を追求したかったということではないでしょうか」 「吉村家」と袂を分かって誕生した「六角家」は、独自路線で成長していった。「六角家」の転機になったのは1994年、新横浜駅近くに誕生した「新横浜ラーメン博物館」に横浜代表として出店したことだった。これにより、全国的な知名度を得た「六角家」は本家の「吉村家」や、吉村氏とは別の経営者を迎えた「本牧家」とともに「家系御三家」とファンの間で呼ばれるようになる。この三店は、次々弟子をとり、彼らを独立させることで、直系店を増やしていった。今でも、この時期の御三家による「争い」はファンの間で語り草となっている。 特に有名なのは、94年に起きた「環2ラーメン戦争」だろう。事の発端は94年、「本牧家」が環状2号線に面した土地に移転したことに始まる。移転から1年も経たずして、「本牧家」の店舗からわずか徒歩1分の位置に、吉村「吉村家」の直系店舗「環2家」がオープンしたのだ。「ちょうどこの頃は横浜各地に吉村家の直系店舗が広がり始めた時期。環状2号線はもともとロードサイドのラーメン激戦区でしたから、偶然、出店が近くになってしまうことはありうる。しかし、『本牧家』と『環2家』はそれにしても近すぎる距離でした。家系ファンの間では『吉村家が直弟子を使って、本牧家をつぶしにきた』と囁かれることもありました」(前出・山本氏) しかし、この戦争は「本牧家」と「環2家」両方が客を離さぬために、職人たちが味の改良を進めたという側面もある。「環2ラーメン戦争」の決着はいまだについておらず、今も両店は行列の絶えない人気店であり、徒歩1分の距離で互いに火花を散らしている。 2000年代初頭になって、吉村家は「杉田家」(横浜市磯子区)、「はじめ家」(富山県魚津市)、「王道家」(千葉県柏市)、「横横家」(横浜市金沢区)などの直系店舗を次々と増やしていった。「『六角家』の多店舗展開や、『吉村家』で修業した人たちの独立開業によって、家系ラーメンの認知度は上がっていきました。1990年代に入ると、『吉村家』や『六角家』の出身者が出した店で修業し、独立開業する者が目立つようになりました。『吉村家』、『六角家』からすれば、孫、曾孫にあたる店になりますね。やがて、家系ラーメンを出す店舗は、発祥の地である横浜を飛び出し、全国各地に広がっていきました。大手飲食企業が、家系ラーメンの人気に商機を見出したのもこの頃だと思います。2010年代に入ると、いよいよ、それらの企業が業界に本格参入してきます。これらの大手飲食企業が各店舗で提供するラーメンが、いわゆる“資本系”と呼ばれるものです」(前出・田中氏) 資本系が徐々に勢力を伸ばす一方、職人たちの技に支えられる「家系御三家」の系列のラーメン店同士でも、競争が激化していった。その最たるものは2013年に起きた「三つ巴の乱戦」(山本氏)である。「『吉村家』の直系店『末廣家』と『六角家』がある県道12号沿いに、元は『吉村家』直系店だった『王道家』の系列である『とらきち家』が開店したのです。『とらきち家』と『六角家』はわずか2軒隣りの距離。ラーメン店の激戦区として知られている地域ですが、『環2ラーメン戦争』を知っている人たちからしたら、またかと思わざるを得ない出来事でした。 もう家系ファンたちは沸き上がりましてね。そもそも『末廣家』が2012年に開店したときに『吉村家がとうとう六角家を潰しに来た』と話題になったのに、その翌年には王道家の系列店がすぐそばに建ったわけです。『吉村家と王道家がタッグを組んで六角家を標的にしたのか』という憶測まで飛び交ったほどです」(同前) しかし、この「三つ巴の乱戦」は4年後に「六角家」の店主である神藤氏が体調不良で店に出ることが困難になり、同店を閉めたことで唐突に決着がついた。「もともと『吉村家』という元祖から派生していった『家系』には、細かな系図があります。あの店は『吉村家』の直系、こっちは『六角家』系列と、ファンは味とともに、“出自”もすごく気にしていました。お店側も、職人のプライドを持って、俺たちの『家系』を見せてやるという気概に溢れて、日々味の改良に明け暮れていた。たしかに『戦争』と呼ばれるほど、競争が激化した地域もありましたけど、それもまた味の新陳代謝を生むプラスの側面があった。あれは家系が進化するための『スパイス』になった部分があるんです」(同前) かつては「家系」の代名詞ともなり、「吉村家」らと“頂上決戦”を行った「六角家」本店の跡地は雑草が伸び放題の空き地になっている。一方の吉村家は、現在は家系総本山だと看板に掲げており、その勢いはますます盛んだ。開店から50年近く経つ現在も長蛇の列ができる人気店である。 ラーメン職人たちの戦いと資本系の台頭。「六角家」の倒産は、家系ラーメンの一つの時代の終焉を意味しているのである。(前編「家系ラーメン・名門『六角家』はなぜ破産したか」を読む)この記事の写真(14枚)
print("<<ネガティブ1位>>", end="\n\n")
for i in range(1, 4):
    print(ranking.iloc[-1, i])
<<ネガティブ1位>>

「365日24時間働こう」……ワタミの“思想教育”はいまも続いていた
https://bunshun.jp//articles/-/40843
ワタミ株式会社の労働問題に関する告発が続いている。10月2日、「ワタミの宅食」営業所の所長が、労働基準監督署からの残業代未払いの是正勧告、月175時間を超える長時間労働、上司によるタイムカードの改ざんを次々と公表したのだ。「ホワイト企業」宣伝のワタミで月175時間の残業 残業代未払いで労基署から是正勧告ワタミがホワイト企業になれなかった理由は? 勝手に勤怠「改ざん」システムも Aさんは長時間労働の末、昼夜の感覚がなくなり、「このまま寝たら、もう目が覚めないのではないか」と恐怖を抱きながら生活するほどだった。「あのまま働いていたら、死んでいた」とAさんは断言する。現在は、精神疾患を発症し、労災申請をしながら休業中だ。 しかし、Aさんは命の危険を感じていながら、なぜ過酷な仕事を続けてしまったのだろうか。その背景には、労働者の意識に働きかけ、過酷な労働を受け入れさせてしまう、ワタミによる「思想教育」のシステムがあった。「こんなにいい仕事をしているんだから、苦しくても頑張ろう」「苦しいことも、苦しくない。むしろ自分の力になる」 Aさんは過重労働の最中、そう自分に言い聞かせていた。 実際、Aさんはワタミの宅食の仕事に「誇り」を感じていたという。確かにワタミの「宅食」に「社会貢献」と言える部分がある。ワタミの宅食には、食事の調達が難しい高齢者に、定期的に安く食事を届けるというコンセプトがある。Aさんの営業所の届け先も、そうした人たちばかりだった。 隔日でデイサービスに通い、隔日で家にいるときの食事に困る一人暮らしの高齢者。毎日昼食用と夕食用の2食を頼んで、ワタミの宅食しか食べていない高齢者、障がい者や、親を介護している人......。 苦しい生活の事情によって、食事に手間や時間、お金をかけられず、ワタミに頼らざるを得ない様々な利用者がいた。それまで介護や教育現場で働いてきたAさんにとって、社会や地域のためになる宅食の仕事は、非常にやりがいの感じられるものだった。 だがそれらの「支援」を通じて無理やり利益をあげようとすれば、長時間労働や低賃金による労働者の犠牲によって支えられることになってしまう。いわば「貧困・ブラック企業ビジネス」とでもいえようか。 Aさんも当初、仕事のやりがいと過酷な労働とは分けるべきものだと冷静に考え、業務のつらさについてはワタミに不満を抱いていた。 しかし、劣悪な労働条件は、Aさんの頭の中ではいつしか問題とはならなくなっていた。その変化をもたらしたのが、ワタミによる「思想教育」だったと、Aさんは振り返っている。「365日24時間、死ぬまで働け」 この言葉をご存知の方も多いだろう。渡邉美樹氏の過去の30年以上に渡る文章を抜粋して編集した400ページにも及ぶ「理念集」という書物に記載されていた言葉である。Aさんは入社直後に会社から「理念集」を渡され、肌身離さず持っているよう言われた。 現在は批判を受けて、「死ぬまで働け」などの極端な表現は削除されている。それでもAさんが手渡された「理念集」(2016年度版)に削除されずに残っていた、印象的な表現の一部を引用しよう。〈私は、仕事はお金を得る為だけの手段とは考えていません。仕事とはその人の「生き方」そのものであり、「自己実現の唯一の手段」であると信じています。だから新卒のセミナーでも、時代遅れはなはだしいと言われつつ、「365日24時間働こう」と言うのです〉〈私も会社説明会で、「仕事とは生きることそのものなんだ。仕事を、お金を得るための手段なんかにしてはいけないんだ。仕事を通して人間性を高めよう」と訴えています〉〈ワタミタクショクの最大の商品は「人」と知れ。まごころさん(注:宅食の配達員)とは、お弁当に「心」を乗せて運び、「ありがとう」をいただく仕事をする人のこと。考え違いをして「お弁当」を運び「お金」をいただく仕事と思う人が出てこないことを祈る〉 このように、同書には、客からの「ありがとう」という感謝のために働くことを奨励して、賃金のために働くことを批判し、ワタミの利益のために自分を犠牲にすることを正当化する内容が、随所に記されていた。 ワタミに入社したAさんは、何かトラブルがあると、支社長から「理念集の第×章をちゃんと読んだ?」と問われ、渡邉美樹氏の「思想」を十分に理解していないせいだと注意されていた。 さらに、エリアマネージャーによる毎月のカウンセリングがあり、そこでは当月の「社内報」(毎月発行され、理念集の文章の多くがここからの抜粋である)の感想と、理念集の任意の箇所の感想を書かされるようになっていた。 加えて、4ヶ月に1回のレポートが課せられた。理念集から指定された章の範囲と、直近4ヶ月分の社内報に掲載される渡邉氏直筆の言葉に対する二つの感想が強制されていた。 Aさんはもともと、これらの感想文提出を「気持ち悪い」と感じていた。しかし、嫌々ながら、継続的に書かされているうちに「どこかで渡邉美樹さんの考えを植え付けられていく感じがあった」という。 それをさらに深化させたのが、「ビデオレター」の存在だった。 毎月、営業所には渡邉美樹氏が出演する「ビデオレター」が提供された。人気テレビ番組「情熱大陸」のナレーターが起用され、渡邉美樹氏が毎回出演し、ワタミの事業の素晴らしさを説く30分間の映像である。 この映像についても、毎月の感想が義務付けられていた。しかも書くのは所長だけではない。個人事業主であるはずの配達員までも、毎月ビデオレターを視聴して感想を書くことが契約に盛り込まれていた。 配達員たちは、営業所でこの映像を見せられると、所長と配達員の名前が羅列されたシートの自分の感想欄(60字ほどは書けるスペースがある)に、手書きで感想を書かされる。なお、配達員は配達先1軒あたりの報酬が百数十円しかないが、この映像視聴や感想を書くことによる新たな報酬は一切ない。 さらに配達員の感想に、ワタミに対する批判や仕事への不満などがある場合は、所長がその箇所に印をして、コメントを書き加えるようにと指示されていた。Aさんは独自の工夫として、すべての配達員の感想に対して、その配達員の感想を超えるほどの字数で、丁寧にコメントをするようにした。 そして、この「コメント」こそが、Aさんの「思想形成」に大きな役割を果たしていたという。 Aさんは、上司のエリアマネージャーから、「配達員たちに、ワタミを称賛するような感想を書くよう“もっていく”ことも所長の仕事だ」と言われていた。配達員の感想を「コントロール」するようにというのだ。 とはいえ、Aさんは配達員の感想の「改ざん」をしたわけではない。まず、Aさんは所長として、配達員に先立って自分の感想欄で、ワタミの事業やワタミで働くことの素晴らしさを説いた。すると、後から書く配達員たちは、おのずと所長の「模範解答」を意識して、否定的な感想を書きづらくなる。 それでも配達員の感想に、ワタミに疑問を呈するような箇所でもあれば、コメント欄でそこを指摘し、「意義を改めて私と共有しましょう」などと食い下がった。やがて、数ヶ月をかけて配達員たちのコメントから否定的な文章は消え、少なくとも表向きは、ワタミを褒め称える感想一色になっていった。 ワタミの素晴らしさをひたすら繰り返す、この毎月のコメントは「思想形成」に着実に影響をもたらした。ただし、本当に変わったのは、配達員ではなく、所長であるAさんの方だったのである。 ワタミに対する「称賛」を業務の必要上、あえて続けていたはずのAさんは、徐々にワタミの事業や労働を無条件に賛美し、労働問題の不満を感じなくなる意識が本当に芽生えてきたという。配達員の感想を何度も指導するという行為を通じて、Aさん自身の意識こそが「教育」されてしまったのだ。 ここで、Aさんが配達員に見せるために書いた、ビデオレターの感想文を引用してみよう。ワタミのSDGsの取り組みや、ワタミが行っているカンボジアの学校支援の取り組みの映像をみた感想だ。〈SDGsという言葉が社会に広く知れわたる前からワタミは取り組みを継続してきました。私はそのような会社で仕事させていただき、本当に感謝致します。自分のすぐ近くにも、社会の役に立つことができることは多くあります。いつも勇気と誇りを胸に笑顔を持って努めて参ります〉〈自分もキラキラした笑顔、そしてまごころさんがキラキラした笑顔でいられる様、前進していきます〉〈ここ(注:Aさんの営業所)を輝かせることこそ私の仕事です。精一杯、努めて参ります!!〉 ワタミの事業に対する絶賛と、ワタミで働かせてもらっていることの感謝。スペースをはみ出るほどの分量と、異様なほどに高揚した表現。当時のAさんが本当にワタミを「信奉」する気持ちがなければ、ここまで書くことは難しいだろう。 現在、精神疾患で休業中のAさんは、この自分の感想文を改めて見返し、こう呟いた。「気持ち悪いですね、いま読むと」 月の残業時間が150時間を超えたころ、Aさんは長時間労働について「私が悪い」と思い詰めていた。多すぎる業務量はワタミの責任なのに、そこは「思想教育」のために受け入れてしまい、むしろ仕事が遅いせいだと自分を責めるようになっていたのだ。 そんなとき、新しく入った配達員の一人が、深夜まで働くAさんを見て心配し、単刀直入に指摘してくれた。「Aさん、『洗脳』されてるんじゃないの?」 当初、「失礼な人だ」と憤ったが、何度もこの配達員が親身になって指摘してくれるうちに、「私、おかしいのかも」と思い始めるようになっていた。 また、単身赴任中だった配偶者が、コロナ禍によってテレワークで自宅勤務をするようになっていた影響も大きかった。Aさんが深夜や休日も延々と働く姿を見て、目を覚ますよう何度も説得したという。 最後に、Aさんは筆者が代表を務めるNPO法人POSSE、そして個人加盟の労働組合のブラック企業ユニオンに辿り着き、ワタミの労働問題を大々的に告発することを決意した。こうして、周囲の人たちに恵まれ、支援者に出会えたことで、Aさんはワタミの「洗脳」を脱し、これまでの労働問題を直視できるようになったのだ。 Aさんはいま、自分がワタミの労働問題に加担したのではという自責の念を抱いている。「ひとつ間違えば、私も上司と同じことをやったと思います」。自分の責任を果たすべく、これからもAさんは、ワタミの告発を続けていくつもりだという。この記事の写真(8枚)

最もポジティブな記事と最もネガティブな記事を表示させてみました。

なんとなく正しく評価できている気がしますね!

説明は以上です。読んでいただいてありがとうございます。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

文春オンラインの記事をスクレイピング&ネガポジ分析

始めに

けい@airget0919と申します。都内で機械学習エンジニアをしております。
何か実践力をアウトプットできないかなと思いこの記事を書いています。
今回は自然言語処理を実施する前段階として、ネット上から記事を取得して簡単な分析をしてみます。

技術ワード

スクレイピングとは

スクレイピングを利用することでネット上の様々な情報を取得することができます。
今回はPythonのコードを利用して記事を取得しています。
BeautifulSoupなどを利用して、HTMLやCSSの情報を指定して情報を抽出します。

ネガポジ分析について

記事の内容がネガティブなのかポジティブなのかを単語感情極性対応表を基準にして数値化してみようと思います。
単語感情極性対応表は単語に対してネガポジ度を-1〜1で定義してあります。

喜び:よろこび:名詞:0.998861
厳しい:きびしい:形容詞:-0.999755

などです。

参考文献

スクレイピングはudemy講座を利用しました。
ネガポジ分析はこちらの記事を参考にさせていただきました。
また、今回分析対象としたのは文春オンラインです。

作業の流れ

  1. スクレイピング
  2. 「単語感情極性対応表」の読み込み
  3. 形態素解析
  4. ネガポジ分析

上記にそって作業に取り掛かりましょう。
まずは必要なライブラリをインポートするところから始めましょう。

import requests
from bs4 import BeautifulSoup
import re
import itertools
import pandas as pd, numpy as np
import os
import glob
import pathlib
import re
import janome
import jaconv
from janome.tokenizer import Tokenizer
from janome.analyzer import Analyzer
from janome.charfilter import *

スクレイピング

まずはスクレイピングの準備です。
URLを取得してrequestsBeautifulSoupを適用します。

url = "https://bunshun.jp/" # urlに文春オンラインのリンクを格納
res = requests.get(url) # requests.get()を用いてurlをresに格納
soup = BeautifulSoup(res.text, "html.parser") # ここでBeautifulSoupを用いてスクレイピングの準備ができました。

記事一覧を取得して、タイトルとURLを取得

基本的には記事がli要素として並んでおり、その親要素はulであるというパターンが多いです。
for文を使って記事一覧からタイトルとURLを取得しています。

elems = soup.select("ul") # 記事のリストがli要素として並んでいたので、その親要素であるulを指定しています。
title_list = [] # 記事のタイトルを格納するリスト
url_list = [] # 記事のURLを格納するリスト
for sibling in elems[3]: # elems[3]に欲しいリストがありました。このfor分により記事のリストから記事のタイトルとURLを取得し、それぞれリストに格納します。
    if sibling != "\n": # 改行が含まれていたので除外
        print(sibling.h3.string) # タイトルはh3タグに入っていました。
        title_list.append(sibling.h3.string.replace('\u3000', ' ')) # \u3000が入っている部分があったので空白に変換
        print(url + sibling.h3.a["href"]) # aタグのhref属性にリンクが格納されていました。
        url_list.append(url + sibling.h3.a["href"]) # 上記で取得したurl以下の部分が格納されていたので足しています。
ジャニーズ元MADEリーダー・稲葉光(29)が元Berryz工房アイドルと“渋谷ホテルデート”《スクープ撮》
https://bunshun.jp//articles/-/40869
「駅近、約1,200㎡の広大な敷地」「自宅の建て替えと地域貢献を両立する土地活用」プロが出した答えとは?
https://bunshun.jp//articles/-/40010
「365日24時間働こう」……ワタミの“思想教育”はいまも続いていた
https://bunshun.jp//articles/-/40843
“縦割り行政”の弊害だ! 橋下徹が語る「Go Toキャンペーンは何が間違っているのか」
https://bunshun.jp//articles/-/40877
警察官に唾吐き公務執行妨害で逮捕 読売新聞がソウル支局記者を懲戒処分
https://bunshun.jp//articles/-/40868
同性愛差別の足立区議宛てに「とんでもない思い違いです」…81歳祖母の手紙が教えてくれたこと
https://bunshun.jp//articles/-/40826
家系ラーメン“のれん分け戦争”「吉村家vs.六角家」裏切りと屈服の黒歴史〈六角家破産〉
https://bunshun.jp//articles/-/40752
《平手派また卒業》欅坂46・佐藤詩織が書いた「活動のなかで悲しかったこと」 櫻坂46の“急勾配”を運営も懸念
https://bunshun.jp//articles/-/40862
安倍政権最大の功績は“アイヌ博物館”だった? 200億円をブチ込んだ「ウポポイ」の虚実
https://bunshun.jp//articles/-/40841
「長さ」ではなく…美容師が教える、髪を切るときに言うといい「意外な言葉」
https://bunshun.jp//articles/-/40694

複数ページのリンクを取得

リンク一覧を作成するために、while文を作って次のページへのリンクがあればそのURLを取得してページに遷移し、遷移したページにも次のページへのリンクがあれば取得して遷移するというループを回します。
次のページのリンクがなければ次の記事に遷移するようにします。
こうすることにより、全ての記事の全てのページのリンクをリスト形式で取得できます。

news_list = [] # 全てのニュース記事のリンクをここに格納します。
for pickup_link in url_list: # このfor文でURLリストからURLを取り出します。
    news = [] # ニュース記事はページごとに分かれているため、このリストに各ページのリンクを格納します。
    news.append(pickup_link) # 最初のリンクを格納
    pickup_res = requests.get(pickup_link) # requests.get()を用いてリンクからページを取得
    pickup_soup = BeautifulSoup(pickup_res.text, "html.parser") # BeautifulSoupを適用
    while True: # このwhile文では次のページへのリンクがあればそのリンクを取得し、そのページへ遷移するというループを回します。
        try: # 遷移した先で次のページへのリンクがあれば永遠にこのループを繰り返します。
            next_link = pickup_soup.find("a", class_="next menu-link ga_tracking")["href"] # next menu-link ga_trackingというクラスを持つaタグのhref属性が次のページへのリンクでした。
            next_link = url + next_link
            next_res = requests.get(next_link) # requests.get()とBeautifulSoupを用いて遷移先のページ情報を取得します。
            pickup_soup = BeautifulSoup(next_res.text, "html.parser")
            news.append(next_link) # newsに各ページ情報を追加します。
        except Exception: # 次のページへのリンクが無ければここの処理が行われます。
            news_list.append(news) # タイトル内の全ての記事をURLがnewsに格納されたのでそれをnews_listに格納します。
            break
display(news_list) # 作成したURLリストを表示します。
[['https://bunshun.jp//articles/-/40869',
  'https://bunshun.jp//articles/-/40869?page=2',
  'https://bunshun.jp//articles/-/40869?page=3',
  'https://bunshun.jp//articles/-/40869?page=4'],
 ['https://bunshun.jp//articles/-/40010',
  'https://bunshun.jp//articles/-/40010?page=2'],
 ['https://bunshun.jp//articles/-/40843',
  'https://bunshun.jp//articles/-/40843?page=2',
  'https://bunshun.jp//articles/-/40843?page=3',
  'https://bunshun.jp//articles/-/40843?page=4'],
 ['https://bunshun.jp//articles/-/40877',
  'https://bunshun.jp//articles/-/40877?page=2'],
 ['https://bunshun.jp//articles/-/40868',
  'https://bunshun.jp//articles/-/40868?page=2'],
 ['https://bunshun.jp//articles/-/40826',
  'https://bunshun.jp//articles/-/40826?page=2',
  'https://bunshun.jp//articles/-/40826?page=3',
  'https://bunshun.jp//articles/-/40826?page=4'],
 ['https://bunshun.jp//articles/-/40752',
  'https://bunshun.jp//articles/-/40752?page=2',
  'https://bunshun.jp//articles/-/40752?page=3',
  'https://bunshun.jp//articles/-/40752?page=4'],
 ['https://bunshun.jp//articles/-/40862',
  'https://bunshun.jp//articles/-/40862?page=2',
  'https://bunshun.jp//articles/-/40862?page=3'],
 ['https://bunshun.jp//articles/-/40841',
  'https://bunshun.jp//articles/-/40841?page=2',
  'https://bunshun.jp//articles/-/40841?page=3',
  'https://bunshun.jp//articles/-/40841?page=4',
  'https://bunshun.jp//articles/-/40841?page=5'],
 ['https://bunshun.jp//articles/-/40694',
  'https://bunshun.jp//articles/-/40694?page=2',
  'https://bunshun.jp//articles/-/40694?page=3',
  'https://bunshun.jp//articles/-/40694?page=4']]

記事の内容を取得

先ほどのコードでURLリストを作成できたので、そのリンクを辿って記事本文を取得していきます。
.textを適用することで本文のみを取得できるのですが、細かくfor文を回して.textを適用しています。
そのためいくつかの空文字(or空リスト)を作成して格納しながら本文を格納したリストを作成していきました。

news_page_list = [] # ここに全ての記事の本文を格納します。
for news_links in news_list: # このfor文でURLのリストからあるタイトルのリンクリストを取り出します。
    news_page = '' # ここに各ページから取得した本文を追加していきます。
    for news_link in news_links: # タイトルのリンクリストからリンクを一つずつ取り出します。
        news_res = requests.get(news_link) # requests.get()とBeautifulSoupを利用して記事の情報を取得します。
        news_soup = BeautifulSoup(news_res.text, "html.parser") 
        news_soup = news_soup.find(class_=re.compile("article-body")).find_all("p") # article-bodyというidを持つタグの直下のpタグに本文が格納されていました。
        news_phrase = '' # そのページの本文のフレーズを格納
        for news in news_soup: # for文で回すことでtextを適用して本文フレーズのみを取得できました。
            news_phrase += news.text.replace('\u3000', ' ') # 取得したフレーズを追加。文字列なので+で追加できました。
        news_page += news_phrase # 1ページ分のフレーズが取得できらたらnew_pageに追加
    news_page_list.append(news_page) # 一つのタイトルに対する全ての本文がnew_pageに格納されたらnews_page_listに追加。これはリスト型なのでappendを使用。
for i in range(1, 4): # 取得した本文の一部を表示してみます。うまく取得できたようです。
    print("<%s>" % i, news_page_list[i][:500], end="\n\n")
<1> 多くの土地オーナーから「土地活用のパートナー」として選ばれ続けている三井ホーム。土地活用のプロフェッショナルである同社営業担当者へのインタビューを通じ、三井ホームがパートナーとして選ばれる理由をひも解く本企画。今回は、東京都府中市にある約1,200㎡にも及ぶ広大な自宅敷地を、医院+賃貸住宅+自宅と保育所の計2棟に建て替えた事例を紹介する。本件を担当した東京コンサルティング営業部 東京西エリア 営業グループ長の西嶋俊人氏に話を聞いた。 都心から西に延びる京王線の最寄駅から徒歩約5分の場所に、戦前から続く大地主の自宅があった。敷地面積は約1,200㎡。築約50年の自宅は老朽化が進み、建て替えを検討する必要があった。 70代のオーナーさまは、この地に代々続く地主のご一族で、自宅周辺にも複数の賃貸マンションを所有されている方です。老朽化した築約50年の自宅などの建て替えを機に、約1,200㎡にも及ぶ広大な敷地を有効活用しようというのが今回のプロジェクトの発端です。 銀行から弊社に相談が持ち込まれたのが2018年初め。まず自宅+賃貸住宅というプランを持ってオーナーさまにお会いしました。するとオー

<2>  ワタミ株式会社の労働問題に関する告発が続いている。10月2日、「ワタミの宅食」営業所の所長が、労働基準監督署からの残業代未払いの是正勧告、月175時間を超える長時間労働、上司によるタイムカードの改ざんを次々と公表したのだ。「ホワイト企業」宣伝のワタミで月175時間の残業 残業代未払いで労基署から是正勧告ワタミがホワイト企業になれなかった理由は? 勝手に勤怠「改ざん」システムも Aさんは長時間労働の末、昼夜の感覚がなくなり、「このまま寝たら、もう目が覚めないのではないか」と恐怖を抱きながら生活するほどだった。「あのまま働いていたら、死んでいた」とAさんは断言する。現在は、精神疾患を発症し、労災申請をしながら休業中だ。 しかし、Aさんは命の危険を感じていながら、なぜ過酷な仕事を続けてしまったのだろうか。その背景には、労働者の意識に働きかけ、過酷な労働を受け入れさせてしまう、ワタミによる「思想教育」のシステムがあった。「こんなにいい仕事をしているんだから、苦しくても頑張ろう」「苦しいことも、苦しくない。むしろ自分の力になる」 Aさんは過重労働の最中、そう自分に言い聞かせていた。 実際、Aさ

<3> 「規制改革」「行政改革」「縦割り打破」。 菅義偉政権発足後、「改革」という言葉がよく聞こえてくるようになった。菅首相は9月16日の就任記者会見でも「規制改革を政権のど真ん中に置く」と宣言している。この「改革」によって、日本はどのように変わるのだろうか――。 菅首相と親交の深い橋下徹氏が、「文藝春秋」11月号のインタビューで菅政権の「改革」が目指すところを語った。 橋下氏は自身の経験から、「改革」を進めていくためには「おかしい」と言える感覚を持つことが重要だと語る。「“改革力”というのは、常に身の回りのことにアンテナを張って、『これはおかしい』と感じたら、すぐに口に出すことがものすごく重要です。そうしてその都度直していく。その繰り返しです。 僕が知事・市長だった時も、そのような作業の連続でした。 例えば、公用車に乗ったらマガジンラックに新聞5紙がバサッと差し込まれているんですよ。庁舎に着くまでにニュースをチェックできるからいいんですけど、知事室に入ったら机の上に5紙が、知事応接室に行ったらまた5紙……。『公用車の新聞をそのまま知事室に持っていけばいいじゃないか』『どうなってるんや、この新

データをまとめる

スクレイピングによって得た、今までの情報を一つのDataFrameに格納します。
こうすることでデータが見やすくなるだけでなく、扱いやすくなります。
ここまでできればあとはデータを加工してネガポジ分析をするだけです!

new_no_list = [x for x in range(len(title_list))] # あとで使うのでニュースNo.を作成
newslist = np.array([new_no_list, title_list, url_list, news_page_list]).T # DataFrameに格納する準備として、np.arrayのリストに格納して転置しておく。
newslist = pd.DataFrame(newslist, columns=['ニュースNo.', 'title', 'url', 'news_page_list']) # カラム名を指定してDataFrameに格納
newslist = newslist.astype({'ニュースNo.':'int64'}) # あとでテーブルを結合するためにニュースNo.をint64型に変換
display(newslist)
ニュースNo. title url news_page_list
0 0 ジャニーズ元MADEリーダー・稲葉光(29)が元Berryz工房アイドルと“渋谷ホテルデート... https://bunshun.jp//articles/-/40869 ジャニーズJr.内の人気ユニット「宇宙Six」の山本亮太(30)が違法な闇スロット店に通っ...
1 1 「駅近、約1,200㎡の広大な敷地」「自宅の建て替えと地域貢献を両立する土地活用」プロが出し... https://bunshun.jp//articles/-/40010 多くの土地オーナーから「土地活用のパートナー」として選ばれ続けている三井ホーム。土地活用のプ...
2 2 「365日24時間働こう」……ワタミの“思想教育”はいまも続いていた https://bunshun.jp//articles/-/40843 ワタミ株式会社の労働問題に関する告発が続いている。10月2日、「ワタミの宅食」営業所の所長...
3 3 “縦割り行政”の弊害だ! 橋下徹が語る「Go Toキャンペーンは何が間違っているのか」 https://bunshun.jp//articles/-/40877 「規制改革」「行政改革」「縦割り打破」。 菅義偉政権発足後、「改革」という言葉がよく聞こえて...
4 4 警察官に唾吐き公務執行妨害で逮捕 読売新聞がソウル支局記者を懲戒処分 https://bunshun.jp//articles/-/40868 読売新聞ソウル支局の記者(34)が7月中旬、公務執行妨害の容疑で韓国当局に逮捕されていたこ...
5 5 同性愛差別の足立区議宛てに「とんでもない思い違いです」…81歳祖母の手紙が教えてくれたこと https://bunshun.jp//articles/-/40826 「おばあちゃんが足立区議の件で怒っていて、手紙を書くらしい」  母からこんなLINEが来たの...
6 6 家系ラーメン“のれん分け戦争”「吉村家vs.六角家」裏切りと屈服の黒歴史〈六角家破産〉 https://bunshun.jp//articles/-/40752 「『六角家』は破産しましたが、ジャンルとしての『家系ラーメン』は、年々店舗数が拡大しており、...
7 7 《平手派また卒業》欅坂46・佐藤詩織が書いた「活動のなかで悲しかったこと」 櫻坂46の“急勾... https://bunshun.jp//articles/-/40862 《皆さんこんばんは。今日はいつも応援して頂いている皆様にお伝えしたいことがあります。私、佐藤...
8 8 安倍政権最大の功績は“アイヌ博物館”だった? 200億円をブチ込んだ「ウポポイ」の虚実 https://bunshun.jp//articles/-/40841 ──本当にあれでいいんだろうか? 帰路、雨の道央道をレンタカーでひた走りながら、そんな思いが...
9 9 「長さ」ではなく…美容師が教える、髪を切るときに言うといい「意外な言葉」 https://bunshun.jp//articles/-/40694 掛け布団がだんだん心地よくなってきた、今日この頃。朝夜の急激な気温差に、薄めの上着を羽織っ...

「単語感情極性対応表」の読み込み

ネガポジの判断基準には「単語感情極性対応表」を使用します。
あらかじめ作業ディレクトリにダウンロードしておきましょう。
この「単語感情極性対応表」を分析で使用するための形に整えます。

p_dic = pathlib.Path('/work/dic') # workディレクトリのdicフォルダにパスを通します。ここに「単語感情極性対応表」のファイルを置いています。

for i in p_dic.glob('*.txt'): # 該当のファイルを見つけます。
    with open (i, 'r', encoding='utf-8') as f:
        x = [i.replace('\n', '').split(':') for i in f.readlines()] # 1行ずつ読み込みます。

posi_nega_df = pd.DataFrame(x, columns = ['基本形', '読み', '品詞', 'スコア']) # 読み込んだデータをDataFrameに格納します。
posi_nega_df['読み'] = posi_nega_df['読み'].apply(lambda x : jaconv.hira2kata(x)) # 平仮名をカタカナに変換(同じ読みのものが含まれており、重複を無くす為のようです。)
posi_nega_df = posi_nega_df[~posi_nega_df[['基本形', '読み', '品詞']].duplicated()] # 重複を削除します。
posi_nega_df.head()
基本形 読み 品詞 スコア
0 優れる スグレル 動詞 1
1 良い ヨイ 形容詞 0.999995
2 喜ぶ ヨロコブ 動詞 0.999979
3 褒める ホメル 動詞 0.999979
4 めでたい メデタイ 形容詞 0.999645

形態素解析

記事本文を形態素解析して分析に利用できる形にします。
形態素解析にはTokenizer()UnicodeNormalizeCharFilter()を利用します。
単語、基本形、品詞、読みを取り出してDataFrameに格納します。
そして、記事のDataFrameと「単語感情極性対応表」をマージして、記事に含まれるワードをスコア化します。
下記にその表を示しています。
「人気」という単語が高いスコアを示していますのでポジティブな単語だと判断されました。
他の単語はなぜそのスコアになったんだ?というものもありますが、気にせず進みましょう。

i = 0 # このiはニュースNo.を取得する際に利用します。

t = Tokenizer()
char_filters = [UnicodeNormalizeCharFilter()]
analyzer = Analyzer(char_filters=char_filters, tokenizer=t)

word_lists = []
for i, row in newslist.iterrows(): # iを一つずつ増やしていきニュースNo.とします。
    for t in analyzer.analyze(row[3]): # 取り出したレーベルの3カラム目に本文が格納されています。
        surf = t.surface # 単語
        base = t.base_form # 基本形
        pos = t.part_of_speech # 品詞
        reading = t.reading # 読み

        word_lists.append([i, surf, base, pos, reading]) # word_listsに追加
word_df = pd.DataFrame(word_lists, columns=['ニュースNo.', '単語', '基本形', '品詞', '読み'])
word_df['品詞'] = word_df['品詞'].apply(lambda x : x.split(',')[0]) # 品詞は複数格納されるが最初の1つのみ利用
display(word_df.head(10)) # 作成した本文のテーブルを表示
print("↓↓↓↓↓↓↓単語感情極性対応表とマージ↓↓↓↓↓↓↓")
score_result = pd.merge(word_df, posi_nega_df, on=['基本形', '品詞', '読み'], how='left') # 本文のテーブルと単語感情極性対応表をマージ
display(score_result.head(10)) # 作成したスコアテーブルを表示。「人気」という単語のスコアが高いのは分かるが他は微妙、、、
ニュースNo. 単語 基本形 品詞 読み
0 0 ジャ ジャ 名詞 ジャ
1 0 ニーズ ニーズ 名詞 ニーズ
2 0 Jr Jr 名詞 *
3 0 . . 名詞 *
4 0 名詞 ナイ
5 0 助詞
6 0 人気 人気 名詞 ニンキ
7 0 ユニット ユニット 名詞 ユニット
8 0 記号
9 0 宇宙 宇宙 名詞 ウチュウ
↓↓↓↓↓↓↓単語感情極性対応表とマージ↓↓↓↓↓↓↓
ニュースNo. 単語 基本形 品詞 読み スコア
0 0 ジャ ジャ 名詞 ジャ NaN
1 0 ニーズ ニーズ 名詞 ニーズ -0.163536
2 0 Jr Jr 名詞 * NaN
3 0 . . 名詞 * NaN
4 0 名詞 ナイ -0.74522
5 0 助詞 NaN
6 0 人気 人気 名詞 ニンキ 0.96765
7 0 ユニット ユニット 名詞 ユニット -0.155284
8 0 記号 NaN
9 0 宇宙 宇宙 名詞 ウチュウ -0.515475

ネガポジ分析

先ほど作成したテーブルを用いて記事全体のネガポジ度を評価します。

result = []
for i in range(len(score_result['ニュースNo.'].unique())): # ニュースNo.を利用してfor文を回します。
    temp_df = score_result[score_result['ニュースNo.']== i]
    text = ''.join(list(temp_df['単語'])) # 1タイトル内の全ての単語をつなげる。
    score = temp_df['スコア'].astype(float).sum() # 1タイトル内のスコアを全て足し合わせる。➡︎累計スコア
    score_r = score/temp_df['スコア'].astype(float).count() # 本文の長さに影響されないように単語数で割り算する。➡︎標準化スコア
    result.append([i, text, score, score_r])

ranking = pd.DataFrame(result, columns=['ニュースNo.', 'テキスト', '累計スコア', '標準化スコア']).sort_values(by='標準化スコア', ascending=False).reset_index(drop=True) # 標準化スコアで並び替えてDataFrameに格納
ranking = pd.merge(ranking, newslist[['ニュースNo.', 'title', 'url']], on='ニュースNo.', how='left') # ニュースNo.基準でマージする。タイトルとURLを追加する。
ranking = ranking.reindex(columns=['ニュースNo.', 'title', 'url', 'テキスト', '累計スコア', '標準化スコア']) # カラムを並び替え
display(ranking)
ニュースNo. title url テキスト 累計スコア 標準化スコア
0 6 家系ラーメン“のれん分け戦争”「吉村家vs.六角家」裏切りと屈服の黒歴史〈六角家破産〉 https://bunshun.jp//articles/-/40752 「『六角家』は破産しましたが、ジャンルとしての『家系ラーメン』は、年々店舗数が拡大しており、... -238.437124 -0.408983
1 1 「駅近、約1,200㎡の広大な敷地」「自宅の建て替えと地域貢献を両立する土地活用」プロが出し... https://bunshun.jp//articles/-/40010 多くの土地オーナーから「土地活用のパートナー」として選ばれ続けている三井ホーム。土地活用のプ... -315.299051 -0.438524
2 7 《平手派また卒業》欅坂46・佐藤詩織が書いた「活動のなかで悲しかったこと」 櫻坂46の“急勾... https://bunshun.jp//articles/-/40862 《皆さんこんばんは。今日はいつも応援して頂いている皆様にお伝えしたいことがあります。私、佐藤... -136.887378 -0.447344
3 5 同性愛差別の足立区議宛てに「とんでもない思い違いです」…81歳祖母の手紙が教えてくれたこと https://bunshun.jp//articles/-/40826 「おばあちゃんが足立区議の件で怒っていて、手紙を書くらしい」 母からこんなLINEが来たの... -213.244051 -0.460570
4 9 「長さ」ではなく…美容師が教える、髪を切るときに言うといい「意外な言葉」 https://bunshun.jp//articles/-/40694 掛け布団がだんだん心地よくなってきた、今日この頃。朝夜の急激な気温差に、薄めの上着を羽織った... -192.702889 -0.475810
5 8 安倍政権最大の功績は“アイヌ博物館”だった? 200億円をブチ込んだ「ウポポイ」の虚実 https://bunshun.jp//articles/-/40841 ──本当にあれでいいんだろうか? 帰路、雨の道央道をレンタカーでひた走りながら、そんな思いが... -483.393151 -0.476719
6 0 ジャニーズ元MADEリーダー・稲葉光(29)が元Berryz工房アイドルと“渋谷ホテルデート... https://bunshun.jp//articles/-/40869 ジャニーズJr.内の人気ユニット「宇宙Six」の山本亮太(30)が違法な闇スロット店に通って... -196.888853 -0.479048
7 3 “縦割り行政”の弊害だ! 橋下徹が語る「Go Toキャンペーンは何が間違っているのか」 https://bunshun.jp//articles/-/40877 「規制改革」「行政改革」「縦割り打破」。 菅義偉政権発足後、「改革」という言葉がよく聞こえて... -94.718989 -0.480807
8 4 警察官に唾吐き公務執行妨害で逮捕 読売新聞がソウル支局記者を懲戒処分 https://bunshun.jp//articles/-/40868 読売新聞ソウル支局の記者(34)が7月中旬、公務執行妨害の容疑で韓国当局に逮捕されていたこと... -144.916148 -0.489582
9 2 「365日24時間働こう」……ワタミの“思想教育”はいまも続いていた https://bunshun.jp//articles/-/40843 ワタミ株式会社の労働問題に関する告発が続いている。10月2日、「ワタミの宅食」営業所の所長が... -321.838102 -0.528470

記事の抽出

最もポジティブな記事と最もネガティブな記事を表示させてみましょう。

print("<<ポジティブ1位>>", end="\n\n")
for i in range(1, 4):
    print(ranking.iloc[0, i])
<<ポジティブ1位>>

家系ラーメン“のれん分け戦争”「吉村家vs.六角家」裏切りと屈服の黒歴史〈六角家破産〉
https://bunshun.jp//articles/-/40752
「『六角家』は破産しましたが、ジャンルとしての『家系ラーメン』は、年々店舗数が拡大しており、今が最盛期です。その背景には“資本系”の台頭があります。でもね、確かに資本系も美味しいんですが、かつて『六角家』や『吉村家』の職人たちが日々、味の改良に挑み、切磋琢磨して、互いに覇を競っていたあの時代が、倒産のニュースを聞いた今、妙に懐かしく輝いて見えるんです」(ラーメン評論家・山本剛志氏)(前編「家系ラーメン・名門『六角家』はなぜ破産したか」を読む) 2020年9月4日、かつて家系ラーメンの「代名詞」とまで呼ばれ、一世を風靡した老舗の名店「六角家」が、横浜地裁より破産手続き開始決定を受けていると報じられた。2017年に「六角家」の本店が閉じられ、倒産は時間の問題だったとみるファンも多かったが、いざこのニュースが流れると「マジか」「もう一度食べたかった」など、その倒産を惜しむ声がネット上などで多く上がった。そして、冒頭の山本氏のように、「六角家」がこれまで「家系ラーメン」業界の隆盛にはたした役割について、再評価する声も上がってきている。「そもそも、家系ラーメンが誕生したのは1974年。長距離トラックの運転手だった吉村実氏が仕事の合間に趣味で密かに研究を重ねていた九州の豚骨ベースと東京の醤油ベースを組み合わせたスープを開発したことに端を発しています。この味ならいける! と判断した吉村氏はその後会社を辞め、『吉村家』というラーメン店を横浜の磯子区新杉田に開店。豚骨醤油ベースの風味豊かなスープと、モッチリとした『酒井製麺』の太麺を合わせた1杯は、本人の読みどおり大きな人気を集め、店は日々、大勢のお客さんで賑わいました。 評判を集めた「吉村家」には、多くの才能が集まりました。そして、吉村氏の元で修業をした弟子たちは、吉村氏直々に教わり技術を身に着けると“暖簾分け”という形で自分の店を持つようになり、弟子たちの店もそれぞれのエリアで大人気店となりました。独立した弟子たちが店名に『~家』とつけることが多かったため、ファンの間で、『吉村家』とそこから独立した店は『家系』と呼ばれるようになりました。現在は、“家系皆伝”という証書を吉村氏からもらった店舗のみが吉村家の“直系店舗”として認められています」(ラーメン探究家・田中一明氏) 直系店舗にはいくつか特徴がある。まずは、麺は、酒井製麺所という製麺所から卸している麺でなければならない。『家系といえば酒井製麺』と言われるほどその結びつきは固く、酒井製麺の麺は中太でモチモチした独特の食感があるという。また、麺は寸胴で茹で、テボザルではなく平ザルですくい上げるのも特徴だ。 その直系店鋪以外で、酒井製麺所の麺を使っていたのが今回倒産した「六角家」と、「本牧家」だった。「『六角家』は、吉村氏の一番弟子である神藤隆氏が独立して横浜市神奈川区六角橋で始めた店です。一時は本家『吉村家』や吉村氏が横浜市中区に出したのれん分け1号店である『本牧家』とともに家系御三家と言われたほどの超有名店です。ただ、『六角家』は吉村氏の一番弟子が始めた店にもかかわらず、開店当初から今日まで、一度も吉村氏から吉村家の“直系店舗”として認められたことはありません。『吉村家』と『六角家』はずっとぎくしゃくした関係が続いていたのです」(食ジャーナリスト・小林孝充氏) 一体なぜなのか。ラーメン探究家の田中一明氏が解説する。「吉村氏は1974年に横浜市磯子区新杉田に『吉村家』1号店を開いた後、12年間は支店をつくりませんでしたが、1986年満を持して横浜市中区本牧に2号店である『本牧家』をオープンさせました。この店を弟子の神藤隆氏に任せ、吉村氏はオーナーとして、いよいよ店舗の拡大へと乗り出したかのように見えました。ところがその2年後、店主の神藤氏が従業員を引き連れ、本牧家を出て行ってしまったのです。さらにその後、神藤氏は神奈川区六角橋に自ら『六角家』を開店しました。一方、神藤氏という主を失った『本牧家』は一時期休業を余儀なくされてしまったのです。 なぜ神藤氏は独立したのかについては、当時様々な憶測が飛び交いましたが、私は目指す味の方向性が違っていたことが大きな理由だと思っています。『吉村家』が醤油ダレをガツンと効かせたパンチのあるタイプであるのに対し、『六角家』は豚骨と醤油ダレをバランス良く効かせた食べ手を選ばないタイプであるのが特徴。神藤さんは自ら信じる味を追求したかったということではないでしょうか」 「吉村家」と袂を分かって誕生した「六角家」は、独自路線で成長していった。「六角家」の転機になったのは1994年、新横浜駅近くに誕生した「新横浜ラーメン博物館」に横浜代表として出店したことだった。これにより、全国的な知名度を得た「六角家」は本家の「吉村家」や、吉村氏とは別の経営者を迎えた「本牧家」とともに「家系御三家」とファンの間で呼ばれるようになる。この三店は、次々弟子をとり、彼らを独立させることで、直系店を増やしていった。今でも、この時期の御三家による「争い」はファンの間で語り草となっている。 特に有名なのは、94年に起きた「環2ラーメン戦争」だろう。事の発端は94年、「本牧家」が環状2号線に面した土地に移転したことに始まる。移転から1年も経たずして、「本牧家」の店舗からわずか徒歩1分の位置に、吉村「吉村家」の直系店舗「環2家」がオープンしたのだ。「ちょうどこの頃は横浜各地に吉村家の直系店舗が広がり始めた時期。環状2号線はもともとロードサイドのラーメン激戦区でしたから、偶然、出店が近くになってしまうことはありうる。しかし、『本牧家』と『環2家』はそれにしても近すぎる距離でした。家系ファンの間では『吉村家が直弟子を使って、本牧家をつぶしにきた』と囁かれることもありました」(前出・山本氏) しかし、この戦争は「本牧家」と「環2家」両方が客を離さぬために、職人たちが味の改良を進めたという側面もある。「環2ラーメン戦争」の決着はいまだについておらず、今も両店は行列の絶えない人気店であり、徒歩1分の距離で互いに火花を散らしている。 2000年代初頭になって、吉村家は「杉田家」(横浜市磯子区)、「はじめ家」(富山県魚津市)、「王道家」(千葉県柏市)、「横横家」(横浜市金沢区)などの直系店舗を次々と増やしていった。「『六角家』の多店舗展開や、『吉村家』で修業した人たちの独立開業によって、家系ラーメンの認知度は上がっていきました。1990年代に入ると、『吉村家』や『六角家』の出身者が出した店で修業し、独立開業する者が目立つようになりました。『吉村家』、『六角家』からすれば、孫、曾孫にあたる店になりますね。やがて、家系ラーメンを出す店舗は、発祥の地である横浜を飛び出し、全国各地に広がっていきました。大手飲食企業が、家系ラーメンの人気に商機を見出したのもこの頃だと思います。2010年代に入ると、いよいよ、それらの企業が業界に本格参入してきます。これらの大手飲食企業が各店舗で提供するラーメンが、いわゆる“資本系”と呼ばれるものです」(前出・田中氏) 資本系が徐々に勢力を伸ばす一方、職人たちの技に支えられる「家系御三家」の系列のラーメン店同士でも、競争が激化していった。その最たるものは2013年に起きた「三つ巴の乱戦」(山本氏)である。「『吉村家』の直系店『末廣家』と『六角家』がある県道12号沿いに、元は『吉村家』直系店だった『王道家』の系列である『とらきち家』が開店したのです。『とらきち家』と『六角家』はわずか2軒隣りの距離。ラーメン店の激戦区として知られている地域ですが、『環2ラーメン戦争』を知っている人たちからしたら、またかと思わざるを得ない出来事でした。 もう家系ファンたちは沸き上がりましてね。そもそも『末廣家』が2012年に開店したときに『吉村家がとうとう六角家を潰しに来た』と話題になったのに、その翌年には王道家の系列店がすぐそばに建ったわけです。『吉村家と王道家がタッグを組んで六角家を標的にしたのか』という憶測まで飛び交ったほどです」(同前) しかし、この「三つ巴の乱戦」は4年後に「六角家」の店主である神藤氏が体調不良で店に出ることが困難になり、同店を閉めたことで唐突に決着がついた。「もともと『吉村家』という元祖から派生していった『家系』には、細かな系図があります。あの店は『吉村家』の直系、こっちは『六角家』系列と、ファンは味とともに、“出自”もすごく気にしていました。お店側も、職人のプライドを持って、俺たちの『家系』を見せてやるという気概に溢れて、日々味の改良に明け暮れていた。たしかに『戦争』と呼ばれるほど、競争が激化した地域もありましたけど、それもまた味の新陳代謝を生むプラスの側面があった。あれは家系が進化するための『スパイス』になった部分があるんです」(同前) かつては「家系」の代名詞ともなり、「吉村家」らと“頂上決戦”を行った「六角家」本店の跡地は雑草が伸び放題の空き地になっている。一方の吉村家は、現在は家系総本山だと看板に掲げており、その勢いはますます盛んだ。開店から50年近く経つ現在も長蛇の列ができる人気店である。 ラーメン職人たちの戦いと資本系の台頭。「六角家」の倒産は、家系ラーメンの一つの時代の終焉を意味しているのである。(前編「家系ラーメン・名門『六角家』はなぜ破産したか」を読む)この記事の写真(14枚)
print("<<ネガティブ1位>>", end="\n\n")
for i in range(1, 4):
    print(ranking.iloc[-1, i])
<<ネガティブ1位>>

「365日24時間働こう」……ワタミの“思想教育”はいまも続いていた
https://bunshun.jp//articles/-/40843
ワタミ株式会社の労働問題に関する告発が続いている。10月2日、「ワタミの宅食」営業所の所長が、労働基準監督署からの残業代未払いの是正勧告、月175時間を超える長時間労働、上司によるタイムカードの改ざんを次々と公表したのだ。「ホワイト企業」宣伝のワタミで月175時間の残業 残業代未払いで労基署から是正勧告ワタミがホワイト企業になれなかった理由は? 勝手に勤怠「改ざん」システムも Aさんは長時間労働の末、昼夜の感覚がなくなり、「このまま寝たら、もう目が覚めないのではないか」と恐怖を抱きながら生活するほどだった。「あのまま働いていたら、死んでいた」とAさんは断言する。現在は、精神疾患を発症し、労災申請をしながら休業中だ。 しかし、Aさんは命の危険を感じていながら、なぜ過酷な仕事を続けてしまったのだろうか。その背景には、労働者の意識に働きかけ、過酷な労働を受け入れさせてしまう、ワタミによる「思想教育」のシステムがあった。「こんなにいい仕事をしているんだから、苦しくても頑張ろう」「苦しいことも、苦しくない。むしろ自分の力になる」 Aさんは過重労働の最中、そう自分に言い聞かせていた。 実際、Aさんはワタミの宅食の仕事に「誇り」を感じていたという。確かにワタミの「宅食」に「社会貢献」と言える部分がある。ワタミの宅食には、食事の調達が難しい高齢者に、定期的に安く食事を届けるというコンセプトがある。Aさんの営業所の届け先も、そうした人たちばかりだった。 隔日でデイサービスに通い、隔日で家にいるときの食事に困る一人暮らしの高齢者。毎日昼食用と夕食用の2食を頼んで、ワタミの宅食しか食べていない高齢者、障がい者や、親を介護している人......。 苦しい生活の事情によって、食事に手間や時間、お金をかけられず、ワタミに頼らざるを得ない様々な利用者がいた。それまで介護や教育現場で働いてきたAさんにとって、社会や地域のためになる宅食の仕事は、非常にやりがいの感じられるものだった。 だがそれらの「支援」を通じて無理やり利益をあげようとすれば、長時間労働や低賃金による労働者の犠牲によって支えられることになってしまう。いわば「貧困・ブラック企業ビジネス」とでもいえようか。 Aさんも当初、仕事のやりがいと過酷な労働とは分けるべきものだと冷静に考え、業務のつらさについてはワタミに不満を抱いていた。 しかし、劣悪な労働条件は、Aさんの頭の中ではいつしか問題とはならなくなっていた。その変化をもたらしたのが、ワタミによる「思想教育」だったと、Aさんは振り返っている。「365日24時間、死ぬまで働け」 この言葉をご存知の方も多いだろう。渡邉美樹氏の過去の30年以上に渡る文章を抜粋して編集した400ページにも及ぶ「理念集」という書物に記載されていた言葉である。Aさんは入社直後に会社から「理念集」を渡され、肌身離さず持っているよう言われた。 現在は批判を受けて、「死ぬまで働け」などの極端な表現は削除されている。それでもAさんが手渡された「理念集」(2016年度版)に削除されずに残っていた、印象的な表現の一部を引用しよう。〈私は、仕事はお金を得る為だけの手段とは考えていません。仕事とはその人の「生き方」そのものであり、「自己実現の唯一の手段」であると信じています。だから新卒のセミナーでも、時代遅れはなはだしいと言われつつ、「365日24時間働こう」と言うのです〉〈私も会社説明会で、「仕事とは生きることそのものなんだ。仕事を、お金を得るための手段なんかにしてはいけないんだ。仕事を通して人間性を高めよう」と訴えています〉〈ワタミタクショクの最大の商品は「人」と知れ。まごころさん(注:宅食の配達員)とは、お弁当に「心」を乗せて運び、「ありがとう」をいただく仕事をする人のこと。考え違いをして「お弁当」を運び「お金」をいただく仕事と思う人が出てこないことを祈る〉 このように、同書には、客からの「ありがとう」という感謝のために働くことを奨励して、賃金のために働くことを批判し、ワタミの利益のために自分を犠牲にすることを正当化する内容が、随所に記されていた。 ワタミに入社したAさんは、何かトラブルがあると、支社長から「理念集の第×章をちゃんと読んだ?」と問われ、渡邉美樹氏の「思想」を十分に理解していないせいだと注意されていた。 さらに、エリアマネージャーによる毎月のカウンセリングがあり、そこでは当月の「社内報」(毎月発行され、理念集の文章の多くがここからの抜粋である)の感想と、理念集の任意の箇所の感想を書かされるようになっていた。 加えて、4ヶ月に1回のレポートが課せられた。理念集から指定された章の範囲と、直近4ヶ月分の社内報に掲載される渡邉氏直筆の言葉に対する二つの感想が強制されていた。 Aさんはもともと、これらの感想文提出を「気持ち悪い」と感じていた。しかし、嫌々ながら、継続的に書かされているうちに「どこかで渡邉美樹さんの考えを植え付けられていく感じがあった」という。 それをさらに深化させたのが、「ビデオレター」の存在だった。 毎月、営業所には渡邉美樹氏が出演する「ビデオレター」が提供された。人気テレビ番組「情熱大陸」のナレーターが起用され、渡邉美樹氏が毎回出演し、ワタミの事業の素晴らしさを説く30分間の映像である。 この映像についても、毎月の感想が義務付けられていた。しかも書くのは所長だけではない。個人事業主であるはずの配達員までも、毎月ビデオレターを視聴して感想を書くことが契約に盛り込まれていた。 配達員たちは、営業所でこの映像を見せられると、所長と配達員の名前が羅列されたシートの自分の感想欄(60字ほどは書けるスペースがある)に、手書きで感想を書かされる。なお、配達員は配達先1軒あたりの報酬が百数十円しかないが、この映像視聴や感想を書くことによる新たな報酬は一切ない。 さらに配達員の感想に、ワタミに対する批判や仕事への不満などがある場合は、所長がその箇所に印をして、コメントを書き加えるようにと指示されていた。Aさんは独自の工夫として、すべての配達員の感想に対して、その配達員の感想を超えるほどの字数で、丁寧にコメントをするようにした。 そして、この「コメント」こそが、Aさんの「思想形成」に大きな役割を果たしていたという。 Aさんは、上司のエリアマネージャーから、「配達員たちに、ワタミを称賛するような感想を書くよう“もっていく”ことも所長の仕事だ」と言われていた。配達員の感想を「コントロール」するようにというのだ。 とはいえ、Aさんは配達員の感想の「改ざん」をしたわけではない。まず、Aさんは所長として、配達員に先立って自分の感想欄で、ワタミの事業やワタミで働くことの素晴らしさを説いた。すると、後から書く配達員たちは、おのずと所長の「模範解答」を意識して、否定的な感想を書きづらくなる。 それでも配達員の感想に、ワタミに疑問を呈するような箇所でもあれば、コメント欄でそこを指摘し、「意義を改めて私と共有しましょう」などと食い下がった。やがて、数ヶ月をかけて配達員たちのコメントから否定的な文章は消え、少なくとも表向きは、ワタミを褒め称える感想一色になっていった。 ワタミの素晴らしさをひたすら繰り返す、この毎月のコメントは「思想形成」に着実に影響をもたらした。ただし、本当に変わったのは、配達員ではなく、所長であるAさんの方だったのである。 ワタミに対する「称賛」を業務の必要上、あえて続けていたはずのAさんは、徐々にワタミの事業や労働を無条件に賛美し、労働問題の不満を感じなくなる意識が本当に芽生えてきたという。配達員の感想を何度も指導するという行為を通じて、Aさん自身の意識こそが「教育」されてしまったのだ。 ここで、Aさんが配達員に見せるために書いた、ビデオレターの感想文を引用してみよう。ワタミのSDGsの取り組みや、ワタミが行っているカンボジアの学校支援の取り組みの映像をみた感想だ。〈SDGsという言葉が社会に広く知れわたる前からワタミは取り組みを継続してきました。私はそのような会社で仕事させていただき、本当に感謝致します。自分のすぐ近くにも、社会の役に立つことができることは多くあります。いつも勇気と誇りを胸に笑顔を持って努めて参ります〉〈自分もキラキラした笑顔、そしてまごころさんがキラキラした笑顔でいられる様、前進していきます〉〈ここ(注:Aさんの営業所)を輝かせることこそ私の仕事です。精一杯、努めて参ります!!〉 ワタミの事業に対する絶賛と、ワタミで働かせてもらっていることの感謝。スペースをはみ出るほどの分量と、異様なほどに高揚した表現。当時のAさんが本当にワタミを「信奉」する気持ちがなければ、ここまで書くことは難しいだろう。 現在、精神疾患で休業中のAさんは、この自分の感想文を改めて見返し、こう呟いた。「気持ち悪いですね、いま読むと」 月の残業時間が150時間を超えたころ、Aさんは長時間労働について「私が悪い」と思い詰めていた。多すぎる業務量はワタミの責任なのに、そこは「思想教育」のために受け入れてしまい、むしろ仕事が遅いせいだと自分を責めるようになっていたのだ。 そんなとき、新しく入った配達員の一人が、深夜まで働くAさんを見て心配し、単刀直入に指摘してくれた。「Aさん、『洗脳』されてるんじゃないの?」 当初、「失礼な人だ」と憤ったが、何度もこの配達員が親身になって指摘してくれるうちに、「私、おかしいのかも」と思い始めるようになっていた。 また、単身赴任中だった配偶者が、コロナ禍によってテレワークで自宅勤務をするようになっていた影響も大きかった。Aさんが深夜や休日も延々と働く姿を見て、目を覚ますよう何度も説得したという。 最後に、Aさんは筆者が代表を務めるNPO法人POSSE、そして個人加盟の労働組合のブラック企業ユニオンに辿り着き、ワタミの労働問題を大々的に告発することを決意した。こうして、周囲の人たちに恵まれ、支援者に出会えたことで、Aさんはワタミの「洗脳」を脱し、これまでの労働問題を直視できるようになったのだ。 Aさんはいま、自分がワタミの労働問題に加担したのではという自責の念を抱いている。「ひとつ間違えば、私も上司と同じことをやったと思います」。自分の責任を果たすべく、これからもAさんは、ワタミの告発を続けていくつもりだという。この記事の写真(8枚)

なんとなく正しく評価できている気がしますね!

説明は以上です。読んでいただいてありがとうございます。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

BEM技法を勉強して引っかかったところ

はじめに

本記事はHTML/CSS初心者である筆者がBEM記法を見よう見まねでやった結果、ルール違反となってしまった書き方とその理由、どう書くべきだったのかをまとめたものです。BEMについて知らない初心者の方でも基礎部分の解説を一緒に掲載しているので読んでいただけると幸いです。
BEMの基礎について読み飛ばしたい方はこちら

BEMとは

BEM(Block Element Modifier)はCSSのクラス設計と命名にかかわってくる記法。
Blockの中にはElement、Elementに派生があればModifierを入れ子構造で設計し、クラス管理を容易に行うことができるよう考えられた記法である。

・BEMの基本的な書き方
BEMのクラス命名ではBlock__Element--Modifierといった書き方をとる。
__(アンダースコア二つ)はBlockとElementをつなぐ際に使われる、アンダースコアである理由は「下層」を表すため。
--(ハイフン二つ)はModifierを書く際に使用される、BlockとElementのバリエーション違いを表す際に使うので「対等」を意味する。

以下にBEM記法で設計したHTML/SCSSの例を示す。

HTMLファイル
<div class="content">
  <p class="content__text">BEMテスト</p>
  <button class="content__button content__button--large">大きいボタン</button>
  <button class="content__button content__button--small">小さいボタン</button>
</div>
SCSSファイル
.content {
    width: 600px;
    height: 400px;
    padding: 1em;
    border: 2px solid #000000;

    &__text {
        font-size: 24px;
        font-style: italic;
    }

    &__button {
        padding: 1em;
        border: 2px solid #000000;

        &--large {
            width: 200px;
            height: 100px;
        }

        &--small {
            width: 100px;
            height: 50px;
        }
    }
}

Block 一つのくくりであり、以下のElement,Modifierの起点になるもの、一つのコンポーネント
Element Blockを構成するための要素  例:画像やテキスト、ボタン
Modifier Block,Elementのバリエーション違いのもの  例:赤い、小さい、静かな

ModifierをElementの中に入れておらずルール違反となった書き方

HTMLファイル(修正前)
<!--...略-->
<div class="hobby">
   <h2 class="hobby__text--red">趣味:釣り</h2>            <!--この行が問題-->
   <p>主にイカ釣りをしています!写真は2年くらい前のもの...</p>
  <img class="hobby__picture" src="image/ika.jpg">
</div>
<!--...略-->

Blockの中に直接Modifier付きのElementが入っていることが問題である。
どうしてこのように書いてしまったかというと、hobby__text(Block__Element形式)はhobby__text--red(Block__Element--Modifier形式)の中に含まれており、他の派生を作成する予定がなかったためわざわざ外側のElementは要らないのではと判断してしまった。

これはファイルフォルダのイメージで見ると、一つのフォルダの中に画像、コードなどが乱雑に置かれたようになってしまいBEMの長所が生かされなくなってしまう。
そのため動かないわけではないがBEM記法で設計する以上、避けるべき書き方であると分かった。

↓本来はこうするべき

HTMLファイル(修正後)
<div class="hobby">
  <div class="hobby__text">                               <!--追記した部分-->        
    <h2 class="hobby__text--red">趣味:釣り</h2> 
    <p>主にイカ釣りをしています!写真は2年くらい前のもの...</p>
  </div>                                                  <!--追記した部分-->
 <img class="hobby__picture" src="image/ika.jpg">
</div>

Block__Element--Modifier形式のクラス名を定義するには必ず派生元であるBlock__Element形式で書かれたクラスが必要である。
つまりBlock__ElementはBlockの中にいなければならない!ということでもある

Elementの中にElementを定義してしまいルール違反となった書き方

リンク付きの画像を表現するとき、HTMLではimgタグをaタグで囲む。この場合どちらもBlock内の要素と考えられるためElementとして定義したく、以下のコードの__linkというElementの中に__pictureや__textというElementを入れ子で書きたかった。

HTMLファイル(修正前)
<div class="favorite">
  <div class="favorite__link">
    <a href="#">
      <img class="favorite__link__picture" src="image1.jpg">
    </a>
    <div class="favorite__link__text">画像1テキスト</div>
  </div>
  <div class="favorite__link">
    <a href="#">
      <img class="favorite__link__picture" src="image2.jpg">
    </a>
    <div class="favorite__link__text">画像2テキスト</div>
  </div>
  <div class="favorite__texts">
    <p>画像はそれぞれ実際に撮影したものです!</p>
    <p>画像をクリックすると地図にジャンプ</p> 
  </div>
</div>

実はElement内に別のElementを定義してはいけないというBEM記法のきまりがある。
そのため以下のコードのように編集した。

favoriteのBlock内部に別Blockのfavorite-linkを作り、その内部に__pictureや__textというElementを定義する設計とした。

HTMLファイル(修正後)
<div class="favorite">
  <div class="favorite-link">
    <a href="#">
      <img class="favorite__link__picture" src="image1.jpg">
    </a>
    <div class="favorite__link__text">画像1テキスト</div>
  </div>
  <div class="favorite-link">
    <a href="#">
      <img class="favorite__link__picture" src="image2.jpg">
    </a>
    <div class="favorite__link__text">画像2テキスト</div>
  </div>
  <div class="favorite__texts">
    <p>画像はそれぞれ実際に撮影したものです!</p>
    <p>画像をクリックすると地図にジャンプ</p> 
  </div>
</div>

※サイト、画像のリンクや画像テキストの内容は編集しています

設計の際にはいくつBlockが必要なのかを考えてから設計しないと手戻りやリネームなどの面倒な作業が増えてしまう恐れがある。

参考文献

BEMの勉強で参考にさせていただいた記事
一番詳しいCSS設計規則BEMのマニュアル

参考にした本
『Web設計者のためのCSS設計の教科書』 著:谷 拓樹

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Emmetについて

■ はじめに

HTML,CSSのコーディング速度を格段に高めてくれるEmmetについて記事にしました。
この記事で得る内容は以下の通りです。

・Emmetの使用方法について
・Emmetを活用する事で、作業速度及び作業効率が上がる

■ 公式
Emmet チートシート

■ HTMLでのEmmetの使い方(要素)

① 要素の名前(例:div)を入力する

スクリーンショット 2020-10-15 9.29.30.png

② TabキーかEnterキーを入力する(以降の手順でこの記述を省略します)

スクリーンショット 2020-10-15 9.31.36.png

自動でdiv要素を生成してくれます。
他に、a要素の場合は、href属性を、img要素でしたらsrc属性とalt属性を自動で生成します。

4b86dfa4092da00f8be3093d305b5cec.gif

■ HTMLでのEmmetの使い方(クラス)

例えば、p要素にtestクラスをつけて入力したい場合

スクリーンショット 2020-10-15 9.50.19.png

1つずつ文字を入力しても問題ありませんが、下記の様に、p.testと入力すると
入力の手間が省け、打ち間違いのリスクも減少するので、とても便利です。

ptest.gif

■ div要素の場合

div要素は多用されるので、.testと入力するだけでOKです。

divの場合.gif

■ 1つの要素に複数クラスをつけたい場合

div要素に2つクラスをつけて入力したい場合は、下記の様に.text.testと入力すると
text,testクラスが生成されます。

複数クラス.gif

■ 兄弟要素を複数作りたい場合

div要素とa要素を兄弟要素としてまとめて作りたい場合は、.+aと入力すると
同じ兄弟要素としてdivとaが作られます。

ブラザーをまとめて.gif

■ 親子要素を複数作る場合

ul要素とli要素を親子要素として作りたい場合は、ul>liと入力すると
ulが親要素、liが子要素として作られます。

親子関係を作ろうぜ!.gif

■ 子要素を複数作りたい場合

上記の親子要素の例で、li要素を3つ作る場合は、ul>li*3と入力すると
li*の後に数字を指定した分だけ、li要素をまとめて作ることができます。

スクリーンショット 2020-10-15 10.56.05.png

■ CSSでのEmmetの使い方

■ 変換候補の最適化

例えば、下記の場合でfont-sizeを指定したいのですが、このままだと
font-style: italicが指定されてしまいます。

スクリーンショット 2020-10-15 11.24.03.png

ここではfzと入力することでfont-sizeを指定することができます。

スクリーンショット 2020-10-15 11.27.24.png

■ 値を同時に指定したい場合

上記の例で、font-sizeの値をEmmetで同時に指定することもできます。
例えば、font-size: 20px;に指定する場合は、fz20と入力します。

フォントサイズを同時にしてい.gif

■ スペース区切りの指定をする場合

・例① margin: 0 auto;の様に、途中で数字と英単語が区切られている場合でも
m0:aと入力することで、素早く変換できます。

スペース区切りも楽勝だぜ!.gif

・例② padding: 20px 10px;を指定する場合

例2.gif

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む