雪ん子パースペクティヴ 読むとちょっとタメになるエントリー。コメントあると嬉しいです。 2023-11-21T22:08:13+09:00 yuki_sasano Hatena::Blog hatenablog://blog/8454420450099957297 世界一出生率が低い国、韓国 hatenablog://entry/6801883189059860051 2023-11-21T22:08:13+09:00 2023-11-21T22:08:13+09:00 出生率が1.0を下回ると、人口減少の勢いがすごい。 はろー、yukiです。 今回は韓国の少子化について、Bing AIの力を借りながら書いてみます。 まず、韓国は出生率が0.78と、世界で最も出生率が低い国になっています。 その推移をみてみると、2020年が0.83、21年が0.80、22年が0.78と減少傾向にあります。 1970年から90年の間の落ち方も大きいです。1を切ったのは2018年のこと。 ※元データ(datacatalog.worldbank.org) 日本は下図で、1.5を下回ったところを維持し、現在は下落傾向にあります。 2020年が1.33、21年が1.3になっています。 … <p><a class="keyword" href="https://d.hatena.ne.jp/keyword/%BD%D0%C0%B8%CE%A8">出生率</a>が1.0を下回ると、人口減少の勢いがすごい。</p> <p> </p> <p>はろー、<a class="keyword" href="https://d.hatena.ne.jp/keyword/yuki">yuki</a>です。</p> <p> </p> <p>今回は韓国の<a class="keyword" href="https://d.hatena.ne.jp/keyword/%BE%AF%BB%D2%B2%BD">少子化</a>について、<a href="https://www.bing.com/new#features" target="_blank">Bing AI</a>の力を借りながら書いてみます。</p> <p>まず、韓国は<a class="keyword" href="https://d.hatena.ne.jp/keyword/%BD%D0%C0%B8%CE%A8">出生率</a>が0.78と、世界で最も<a class="keyword" href="https://d.hatena.ne.jp/keyword/%BD%D0%C0%B8%CE%A8">出生率</a>が低い国になっています。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fwww.jetro.go.jp%2Fbiz%2Fareareports%2F2023%2F3064013bb970cd4d.html" title=" 2022年の合計特殊出生率0.78の背景(韓国) | 地域・分析レポート - 海外ビジネス情報" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" loading="lazy"></iframe></p> <p> </p> <p>その推移をみてみると、2020年が0.83、21年が0.80、22年が0.78と減少傾向にあります。</p> <p>1970年から90年の間の落ち方も大きいです。1を切ったのは2018年のこと。</p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/y/yuki_sasano/20231118/20231118220200.png" width="468" height="338" loading="lazy" title="" class="hatena-fotolife" itemprop="image" /></p> <p>※<a href="https://datacommons.org/place/country/KOR/?mprop=fertilityRate&amp;popt=Person&amp;cpv=gender,Female&amp;hl=ja" target="_blank">元データ(datacatalog.worldbank.org)</a></p> <p> </p> <p> </p> <p>日本は下図で、1.5を下回ったところを維持し、現在は下落傾向にあります。</p> <p>2020年が1.33、21年が1.3になっています。</p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/y/yuki_sasano/20231118/20231118220626.png" width="569" height="348" loading="lazy" title="" class="hatena-fotolife" itemprop="image" /></p> <p>※<a href="https://datacommons.org/place/country/JPN?hl=ja" target="_blank">元データ(datacatalog.worldbank.org)</a></p> <p> </p> <p> </p> <p>日本と韓国は似ている国ですので、韓国に起きていることは日本にも起きると予想できます。</p> <p> </p> <p><a class="keyword" href="https://d.hatena.ne.jp/keyword/%BD%D0%C0%B8%CE%A8">出生率</a>低下は、</p> <p> 高齢化による労働力の減少、<a class="keyword" href="https://d.hatena.ne.jp/keyword/%BC%D2%B2%F1%CA%DD%BE%E3">社会保障</a>費の増加、家族や地域のつながりの希薄化</p> <p>などを引き起こします。</p> <p> </p> <p>また<a class="keyword" href="https://d.hatena.ne.jp/keyword/%BE%AF%BB%D2%B2%BD">少子化</a>の要因には、</p> <p> 経済的な不安定さ、高い教育費用、女性の社会進出、結婚や出産に対する価値観の変化</p> <p>などがあります。</p> <p> </p> <p>韓国政府はこれらに対処するため、</p> <p> <a class="keyword" href="https://d.hatena.ne.jp/keyword/%BB%D2%B0%E9%A4%C6%BB%D9%B1%E7">子育て支援</a>、保育サービスの拡充、若者の雇用促進</p> <p>を実施していますが、効果は限定的です。</p> <p> </p> <p>このまま続くと、韓国はさらなる人口減少や高齢化、経済成長の鈍化に至る可能性があります。</p> <p>そのため、韓国社会は<a class="keyword" href="https://d.hatena.ne.jp/keyword/%BD%D0%C0%B8%CE%A8">出生率</a>の回復に向け、より包括的で長期的な対策を講じる必要があります。</p> <p> </p> <p> </p> <p>具体的に、韓国政府が講じた対策をみてみます。</p> <h4 id="〇子育て支援政策">〇<a class="keyword" href="https://d.hatena.ne.jp/keyword/%BB%D2%B0%E9%A4%C6%BB%D9%B1%E7">子育て支援</a>政策</h4> <p>韓国では、<a class="keyword" href="https://d.hatena.ne.jp/keyword/%BD%D0%BB%BA%B0%E9%BB%F9%B0%EC%BB%FE%B6%E2">出産育児一時金</a>の支給、保育料の無償化、<a class="keyword" href="https://d.hatena.ne.jp/keyword/%B0%E9%BB%F9%B5%D9%B6%C8">育児休業</a>制度の拡充、<a class="keyword" href="https://d.hatena.ne.jp/keyword/%BB%D2%A4%C9%A4%E2%BC%EA%C5%F6">子ども手当</a>の創設を実施しています。</p> <p>これら政策の目的は、子育てにかかる負担を軽減し、子どもの健やかな成長を促すこと。</p> <p>ですが、これらの政策には課題もあります。</p> <p>例えば、保育施設の不足や質の低下、<a class="keyword" href="https://d.hatena.ne.jp/keyword/%B0%E9%BB%F9%B5%D9%B6%C8">育児休業</a>中の職場復帰の困難さ、<a class="keyword" href="https://d.hatena.ne.jp/keyword/%BB%D2%A4%C9%A4%E2%BC%EA%C5%F6">子ども手当</a>の所得格差の拡大など。</p> <p>これらの課題を解決するためには、政府だけでなく、企業や地域社会、家族などが協力して子育て環境を整備する必要があります。</p> <p> </p> <p> </p> <h4 id="〇保育サービスの拡充政策">〇保育サービスの拡充政策</h4> <p>韓国では、<a class="keyword" href="https://d.hatena.ne.jp/keyword/%BE%AF%BB%D2%B9%E2%CE%F0%B2%BD">少子高齢化</a>や女性の社会進出に伴い、保育サービスの需要が高まっています。</p> <p>ですが、保育施設の不足や質の低さ、費用の高さなどの問題も浮き彫りになっています。</p> <p>そこで、韓国政府は下記のような取り組みを行い、保育サービスの拡充政策を推進しています。</p> <p> </p> <p>・保育施設の増設と改善</p> <p>2022年までに公立保育園を1万5000園、民間保育園を2万5000園増やす。</p> <p>施設の安全性や衛生性を向上。</p> <p> </p> <p>・保育料の減免と補助</p> <p>2022年までに3歳以下の子どもを持つ全世帯に保育料を無償化。</p> <p>4歳以上の子どもにも所得に応じた減免や補助を行う。</p> <p> </p> <p>・保育士の待遇と教育の改善</p> <p>2022年までに保育士の<a class="keyword" href="https://d.hatena.ne.jp/keyword/%BA%C7%C4%E3%C4%C2%B6%E2">最低賃金</a>を月額200万ウォンに引き上げ。</p> <p>定期的な研修や資格試験を実施し、専門性とモチベーションを高める。</p> <p> </p> <p>これらの政策は、子どもたちの健やかな成長と親たちの仕事と家庭の両立を支援することを目的としています。</p> <p>韓国政府は、保育サービスの拡充が社会全体の幸福度と経済発展にも寄与すると考えています。</p> <p> </p> <p> </p> <h4 id="〇若者の雇用促進政策">〇若者の雇用促進政策</h4> <p>韓国では、若者の失業率が高く、社会問題となっています。</p> <p>そこで政府は、若者の雇用促進政策として、以下のような取り組みを行っています。</p> <p> </p> <p>・<a class="keyword" href="https://d.hatena.ne.jp/keyword/%BA%C7%C4%E3%C4%C2%B6%E2">最低賃金</a>の引き上げ<br />・非<a class="keyword" href="https://d.hatena.ne.jp/keyword/%C0%B5%B5%AC%B8%DB%CD%D1">正規雇用</a>の正規化<br />・起業支援や<a class="keyword" href="https://d.hatena.ne.jp/keyword/%A5%A4%A5%F3%A5%BF%A1%BC%A5%F3%A5%B7%A5%C3%A5%D7">インターンシップ</a>の拡充<br />・新興産業やデジタル分野への投資</p> <p> </p> <p>これらの政策は、若者の就労機会を増やし、賃金や労働条件の改善を目指しています。</p> <p>ですが、その一方で、経済的な負担や<a class="keyword" href="https://d.hatena.ne.jp/keyword/%B5%AC%C0%A9%B4%CB%CF%C2">規制緩和</a>の必要性などの課題も存在します。</p> <p> </p> <p> </p> <p> </p> <p>出産、育児、若者の労働。</p> <p>日本も同じようなところに対策を講じていますが、やはり似たような苦労をしそうです。</p> <p>韓国は<a class="keyword" href="https://d.hatena.ne.jp/keyword/%BE%AF%BB%D2%B2%BD">少子化</a>、日本は高齢化の世界的には例をみない問題に直面しています。</p> <p> </p> <p> </p> <p>以上。</p> <p> </p> <p> </p> yuki_sasano 約4,000万円の収入不報告の告発を受けたのは茂木派、麻生派、岸田派、安倍派、二階派の政治団体だった。 hatenablog://entry/6801883189059848932 2023-11-18T21:43:09+09:00 2023-11-18T21:46:31+09:00 政治家や企業は寄付すれば、控除を受けられる以外に良いことあるの? はろー、yukiです。 今回は、この記事の内容が気になったので更新。 内容は、下記5団体が合計4,000万円程度の収入を正確に報告していなかった、といった告発を取り上げた記事。 ちなみに、告発者は大学教授。 ・清和政策研究会・志帥会・平成研究会・志公会・宏池政策研究会 これらは政治団体ですので、政治家の活動を支える財布としての役割があります。 どの政治家をサポートしているのか、どれくらいの金額が寄付されているのか。 また、その政治団体は誰によって管理されているのか。 これらの情報は総務省によって名簿にされています。 団体の一覧は… <p>政治家や企業は寄付すれば、控除を受けられる以外に良いことあるの?</p> <p> </p> <p>はろー、<a class="keyword" href="https://d.hatena.ne.jp/keyword/yuki">yuki</a>です。</p> <p> </p> <p>今回は、この記事の内容が気になったので更新。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fwww3.nhk.or.jp%2Fnews%2Fhtml%2F20231118%2Fk10014262361000.html" title="自民5派閥の政治団体 約4000万収入の不記載で告発 特捜部が任意聴取 | NHK" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" loading="lazy"></iframe></p> <p> </p> <p>内容は、下記5団体が合計4,000万円程度の収入を正確に報告していなかった、といった告発を取り上げた記事。</p> <p>ちなみに、告発者は大学教授。</p> <p> </p> <p>・<a class="keyword" href="https://d.hatena.ne.jp/keyword/%C0%B6%CF%C2%C0%AF%BA%F6%B8%A6%B5%E6%B2%F1">清和政策研究会</a><br />・<a class="keyword" href="https://d.hatena.ne.jp/keyword/%BB%D6%BF%E3%B2%F1">志帥会</a><br />・<a class="keyword" href="https://d.hatena.ne.jp/keyword/%CA%BF%C0%AE%B8%A6%B5%E6%B2%F1">平成研究会</a><br />・<a class="keyword" href="https://d.hatena.ne.jp/keyword/%BB%D6%B8%F8%B2%F1">志公会</a><br />・宏池政策研究会</p> <p> </p> <p>これらは<a class="keyword" href="https://d.hatena.ne.jp/keyword/%C0%AF%BC%A3%C3%C4%C2%CE">政治団体</a>ですので、政治家の活動を支える財布としての役割があります。</p> <p>どの政治家をサポートしているのか、どれくらいの金額が寄付されているのか。</p> <p>また、その<a class="keyword" href="https://d.hatena.ne.jp/keyword/%C0%AF%BC%A3%C3%C4%C2%CE">政治団体</a>は誰によって管理されているのか。</p> <p>これらの情報は<a class="keyword" href="https://d.hatena.ne.jp/keyword/%C1%ED%CC%B3%BE%CA">総務省</a>によって名簿にされています。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fwww.soumu.go.jp%2Fsenkyo%2Fseiji_s%2Fnaruhodo04.html" title="総務省|なるほど!政治資金 政治団体名簿" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" loading="lazy"></iframe></p> <p> </p> <p>団体の一覧はPDFファイルにされており、<a href="https://www.soumu.go.jp/main_content/000718003.pdf" target="_blank">ここ</a>からもアクセスできます。</p> <p>上述した5団体をピックアップします。</p> <p> </p> <p>・<a class="keyword" href="https://d.hatena.ne.jp/keyword/%C0%B6%CF%C2%C0%AF%BA%F6%B8%A6%B5%E6%B2%F1">清和政策研究会</a></p> <p>代表者氏名:<a class="keyword" href="https://d.hatena.ne.jp/keyword/%BE%BE%CB%DC%BD%DF%B0%EC">松本淳一</a>郎</p> <p>会計責任者指名:<a class="keyword" href="https://d.hatena.ne.jp/keyword/%BE%BE%CB%DC%BD%DF%B0%EC">松本淳一</a>郎</p> <p>事務所所在地:東京都<a class="keyword" href="https://d.hatena.ne.jp/keyword/%C0%E9%C2%E5%C5%C4%B6%E8">千代田区</a><a class="keyword" href="https://d.hatena.ne.jp/keyword/%CA%BF%B2%CF%C4%AE">平河町</a>2-7-1</p> <p>設立届届出日:H7.4.7</p> <p> </p> <p>・<a class="keyword" href="https://d.hatena.ne.jp/keyword/%BB%D6%BF%E3%B2%F1">志帥会</a></p> <p>代表者氏名:永井等</p> <p>会計責任者指名:永井等</p> <p>事務所所在地:東京都<a class="keyword" href="https://d.hatena.ne.jp/keyword/%C0%E9%C2%E5%C5%C4%B6%E8">千代田区</a><a class="keyword" href="https://d.hatena.ne.jp/keyword/%CA%BF%B2%CF%C4%AE">平河町</a>2-7-4</p> <p>設立届届出日:H11.3.23</p> <p><br />・<a class="keyword" href="https://d.hatena.ne.jp/keyword/%CA%BF%C0%AE%B8%A6%B5%E6%B2%F1">平成研究会</a></p> <p>代表者氏名:<a class="keyword" href="https://d.hatena.ne.jp/keyword/%CC%D0%CC%DA%C9%D2%BD%BC">茂木敏充</a></p> <p>会計責任者指名:<a class="keyword" href="https://d.hatena.ne.jp/keyword/%C2%E7%B6%B6%B9%B0">大橋弘</a>一</p> <p>事務所所在地:東京都<a class="keyword" href="https://d.hatena.ne.jp/keyword/%C0%E9%C2%E5%C5%C4%B6%E8">千代田区</a>永田町1-11-32</p> <p>設立届届出日:S62.7.13</p> <p> </p> <p>・<a class="keyword" href="https://d.hatena.ne.jp/keyword/%BB%D6%B8%F8%B2%F1">志公会</a></p> <p>代表者氏名:<a class="keyword" href="https://d.hatena.ne.jp/keyword/%CB%E3%C0%B8%C2%C0%CF%BA">麻生太郎</a></p> <p>会計責任者指名:<a class="keyword" href="https://d.hatena.ne.jp/keyword/%C2%BC%BE%BE">村松</a>一郎</p> <p>事務所所在地:東京都<a class="keyword" href="https://d.hatena.ne.jp/keyword/%C0%E9%C2%E5%C5%C4%B6%E8">千代田区</a><a class="keyword" href="https://d.hatena.ne.jp/keyword/%CA%BF%B2%CF%C4%AE">平河町</a>2-5-5</p> <p>設立届届出日:H29.7.6</p> <p> </p> <p>・宏池政策研究会</p> <p>代表者氏名:松倉吉弘</p> <p>会計責任者指名:松倉吉弘</p> <p>事務所所在地:東京都<a class="keyword" href="https://d.hatena.ne.jp/keyword/%C0%E9%C2%E5%C5%C4%B6%E8">千代田区</a>永田町1-11-32</p> <p>設立届届出日:H20.1.17</p> <p> </p> <p> </p> <p>それぞれの<a class="keyword" href="https://d.hatena.ne.jp/keyword/%C0%AF%BC%A3%C3%C4%C2%CE">政治団体</a>をみてみると、主流な各派閥を支える団体ということが分かります。</p> <p> </p> <p><a href="https://heiseiken.jp/member/" target="_blank">平成研究会</a>は茂木さん(茂木派)、<a class="keyword" href="https://d.hatena.ne.jp/keyword/%BB%D6%B8%F8%B2%F1">志公会</a>は麻生さん(<a class="keyword" href="https://d.hatena.ne.jp/keyword/%CB%E3%C0%B8%C7%C9">麻生派</a>)。</p> <p>宏池政策研究会は<a href="https://kouchikai1957.com" target="_blank">宏池会</a>の団体なので、岸田さん(岸田派)。</p> <p><a href="http://www.seiwaken.jp/member/member.html" target="_blank">清和政策研究会</a>は安倍派。</p> <p><a class="keyword" href="https://d.hatena.ne.jp/keyword/%BB%D6%BF%E3%B2%F1">志帥会</a>は<a class="keyword" href="https://d.hatena.ne.jp/keyword/%C6%F3%B3%AC%C7%C9">二階派</a>。</p> <p> </p> <p><a class="keyword" href="https://d.hatena.ne.jp/keyword/%C0%AF%BC%A3%C3%C4%C2%CE">政治団体</a>は数多くあり、個人を支持する団体がほとんどですが、中には上記のように派閥を支える団体もあります。</p> <p>今回、告発をされた<a class="keyword" href="https://d.hatena.ne.jp/keyword/%C0%AF%BC%A3%C3%C4%C2%CE">政治団体</a>は派閥支持の団体ですので、派閥に所属する議員の資金関係も疑えそうです。</p> <p> </p> <p>ちなみに、寄付した人や企業の名前は収入報告書に記載されるので、住所も見られます。</p> <p>もっとも、議員の住所は後援会の連絡所だったりします。</p> <p> </p> <p> </p> <p>以上</p> <p> </p> <p> </p> yuki_sasano 結婚のメリットは経済的に助け合えること、それ以外の要素を補完し合うものではない。 hatenablog://entry/6801883189052536231 2023-10-22T19:28:18+09:00 2023-10-22T19:30:12+09:00 男性の年収と女性の美しさはつり合わない。 はろー、yukiです。 久しぶりのブログ更新。 少子高齢化の問題を考える時、少子化と高齢化は分けて考えたく、今回は少子化に焦点を当てた内容です。 シンクタンクのレポートを参考に、少子化の原因にもなっている結婚について述べます。 まず、未婚割合についてです。 1950年から2020年までの70年間において、50歳時の未婚割合をみると、男女ともに右肩上がりになっています。 2020年では、男性で28.25%、女性で17.81%。 1990年では、いずれも5%を下回っているので、その増加率はすさまじい。 90年代以降は「失われた30年」と言われており、その結… <p>男性の年収と女性の美しさはつり合わない。</p> <p> </p> <p>はろー、<a class="keyword" href="https://d.hatena.ne.jp/keyword/yuki">yuki</a>です。</p> <p> </p> <p>久しぶりのブログ更新。</p> <p><a class="keyword" href="https://d.hatena.ne.jp/keyword/%BE%AF%BB%D2%B9%E2%CE%F0%B2%BD">少子高齢化</a>の問題を考える時、<a class="keyword" href="https://d.hatena.ne.jp/keyword/%BE%AF%BB%D2%B2%BD">少子化</a>と高齢化は分けて考えたく、今回は<a class="keyword" href="https://d.hatena.ne.jp/keyword/%BE%AF%BB%D2%B2%BD">少子化</a>に焦点を当てた内容です。</p> <p><a class="keyword" href="https://d.hatena.ne.jp/keyword/%A5%B7%A5%F3%A5%AF%A5%BF%A5%F3%A5%AF">シンクタンク</a>のレポートを参考に、<a class="keyword" href="https://d.hatena.ne.jp/keyword/%BE%AF%BB%D2%B2%BD">少子化</a>の原因にもなっている結婚について述べます。</p> <p> </p> <p> </p> <p>まず、未婚割合についてです。</p> <p>1950年から2020年までの70年間において、<a href="https://www.nli-research.co.jp/report/detail/id=76218?pno=2&amp;site=nli" target="_blank">50歳時の未婚割合をみる</a>と、男女ともに右肩上がりになっています。</p> <p>2020年では、男性で28.25%、女性で17.81%。</p> <p>1990年では、いずれも5%を下回っているので、その増加率はすさまじい。</p> <p>90年代以降は「<a href="https://ja.wikipedia.org/wiki/%E5%A4%B1%E3%82%8F%E3%82%8C%E3%81%9F30%E5%B9%B4" target="_blank">失われた30年</a>」と言われており、その結果の一つが婚姻率に表われているのではないでしょうか。</p> <p> </p> <p><a href="https://www.nli-research.co.jp/report/detail/id=76218?pno=2&amp;site=nli#anka3" target="_blank">初婚男女の年齢差をみる</a>と、同年齢が22.3%、3歳以内に収まっているのは71.8%。</p> <p>年齢差が4歳以上の男女夫婦の方が、割合としては低いことになります。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fwww.nli-research.co.jp%2Freport%2Fdetail%2Fid%3D76218%3Fsite%3Dnli" title="【未婚化社会の背景を探る】「男性の婚期」最新データ解説-50歳時未婚男性割合3割をもたらす婚期の誤解" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" loading="lazy"></iframe></p> <p> </p> <p> </p> <p>次に、婚姻数の減少についてです。</p> <p><a href="https://www.jri.co.jp/page.jsp?id=102868" target="_blank">婚姻数の減少ペースをみる</a>と、2001年から2018年では年率1.8%。</p> <p>2019年から2021では年率5.5%と、減少ペースが速まっています。</p> <p>この背景の一つに、結婚するつもりのない人の割合が男女ともに増加したことにあります。</p> <p> </p> <p>また、女性は20代のうちに結婚するものとされていましたが、2010年以降は30代の成婚率が高まりました(<a href="https://ja.wikipedia.org/wiki/%E6%99%A9%E5%A9%9A%E5%8C%96" target="_blank">晩婚化</a>)。</p> <p>ですが、20年を超えると、その30代の成婚率も低下傾向にあります。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fwww.jri.co.jp%2Fpage.jsp%3Fid%3D102868" title="婚姻数急減の理由ー背景に非婚希望者の増加も|日本総研" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" loading="lazy"></iframe></p> <p> </p> <p> </p> <p>上記の<a href="https://www.ipss.go.jp/ps-doukou/j/doukou16/JNFS16_Report03.pdf" target="_blank">一生結婚するつもりのない人をみてみる(p.17)</a>と、2021年では、男が17.3%、女が14.6%。</p> <p> ※対象は18~34歳の未婚者</p> <p>この割合も男女ともに右肩上がりになっています(調査は1982年から)。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fwww.ipss.go.jp%2Fps-doukou%2Fj%2Fdoukou16%2Fdoukou16_gaiyo.asp" title="第16回出生動向基本調査(結婚と出産に関する全国調査)|国立社会保障・人口問題研究所" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" loading="lazy"></iframe></p> <p> </p> <p> </p> <p>未婚割合の増加と婚姻数の減少は、結果的には同じではありますが、それぞれのレポートにある「初婚の年齢差」や「結婚への意識」で示されているデータが興味深いです。</p> <p>二つを強引に紐づけて考えると、結婚は年齢の近い人としがちであるなら、結婚する気のない若い人が増えれば増えるほど、婚姻数は減少していくのではないでしょうか。</p> <p> </p> <p>結婚したくてもできない人が増えた、という声が聞こえる一方で、そもそも結婚したくない人も増えた、というのが近年の傾向のようです。</p> <p>個人がそういった気持ちを持つのとは別に、世の中にそういった人が増えている、という客観的な事実があります。</p> <p>似ているようで全く違う二つの因子へは、それぞれの対策が必要になると思います。</p> <p> </p> <p> </p> <p>最後に、参考になる調査も紹介します。独り身(シングル)の貧困についてです。</p> <p> </p> <p>調査では、1985年と2000年の男女のデータが示され、男性の未婚が増えたこと、女性の離別・死別が増えたことが<a href="https://www.nli-research.co.jp/report/detail/id=75915?pno=2&amp;site=nli#anka1" target="_blank">述べられています</a>。</p> <p>この傾向は2000年以降も見られるのではないでしょうか。</p> <p><a href="https://www.nli-research.co.jp/report/detail/id=75915?pno=3&amp;site=nli#anka6" target="_blank">結論</a>では、「雇用形態等」と「有業率」、「本人年収」、「年金の受給状況」、「世帯の金融資産」の五つの指標が出され、それらの人がいずれにもおいても厳しいとなっています。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fwww.nli-research.co.jp%2Freport%2Fdetail%2Fid%3D75915%3Fsite%3Dnli" title="シングル高齢者の増加とその経済状況~未婚男性と離別女性が最も厳しい" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" loading="lazy"></iframe></p> <p> </p> <p>この調査を踏まえ、将来のことを考えてみると、未婚の女性も貧困になる可能性が大きいでしょう。</p> <p>男性は若いうちは仕事もあって稼げるので貯蓄ができますが、中高年になった時が心配です。</p> <p>将来の日本では、解雇規制が緩和されている可能性もあり、この場合、男性も職を失いやすくなります(女性も同じ)。</p> <p>死別の女性は、女性は男性よりも長生きする傾向にあるので、そういった環境になりやすいのでしょう。</p> <p>離別の女性は、シングルマザーであれば、<a class="keyword" href="https://d.hatena.ne.jp/keyword/%BC%E3%A4%A4%BD%F7">若い女</a>性についても貧困化にあると言えそうです。</p> <p> </p> <p>結婚して家庭を持つというのは、男女ともに経済的に助け合う要素が、ますます重要になりそうです。</p> <p>どちらかに経済的に依存するのではなく、助け合う、というのがポイント。</p> <p>女性の社会進出が進むほど、この要素が重視されると思います。</p> <p> </p> <p>男性の年収と女性の若さ・容姿といった別要素のつり合いではなく、年収は年収、年齢は年齢、外見は外見といったように、同じ要素で近しい人を選んでいくようになると思います。</p> <p> </p> <p> </p> <p>以上</p> <p> </p> <p> </p> <p> </p> yuki_sasano 基本情報技術者試験のデータ構造及びアルゴリズム問題をPythonで実装する(平成三十年度春期)。 hatenablog://entry/13574176438062326379 2022-02-11T19:08:36+09:00 2022-02-11T19:11:45+09:00 この問題では、ちょっと正しくない実装になっている。 はろー、yukiです。 基本的に試験問題にある通りに実装していますが、うまくいかないこともあります。 pythonならではの仕様とかが主な要因です。 今回の試験内容は、ヒープソートになります。 ソーティングはアルゴリズムの基本的な内容です(どの本にも書いてあります)。 ですので、アルゴリズムの本を読めば、他のソート問題が出ても対応できると思います。 ちなみに、僕が読んでいるのは「はじめてのアルゴリズ / 上原 隆平」です。 ※もっと良い本があれば、ご紹介ください それでは、コードをみてみましょう。 # H30 春 import math da… <p>この問題では、ちょっと正しくない実装になっている。</p> <p> </p> <p>はろー、<a class="keyword" href="http://d.hatena.ne.jp/keyword/yuki">yuki</a>です。</p> <p> </p> <p>基本的に試験問題にある通りに実装していますが、うまくいかないこともあります。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/python">python</a>ならではの仕様とかが主な要因です。</p> <p> </p> <p>今回の試験内容は、<a href="https://ja.wikipedia.org/wiki/%E3%83%92%E3%83%BC%E3%83%97%E3%82%BD%E3%83%BC%E3%83%88" target="_blank">ヒープソート</a>になります。</p> <p>ソーティングは<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%EB%A5%B4%A5%EA%A5%BA%A5%E0">アルゴリズム</a>の基本的な内容です(どの本にも書いてあります)。</p> <p>ですので、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%EB%A5%B4%A5%EA%A5%BA%A5%E0">アルゴリズム</a>の本を読めば、他のソート問題が出ても対応できると思います。</p> <p>ちなみに、僕が読んでいるのは<a href="https://amzn.to/3gGDdXI" target="_blank">「はじめてのアルゴリズ / 上原 隆平」</a>です。</p> <p> ※もっと良い本があれば、ご紹介ください</p> <p> </p> <p>それでは、コードをみてみましょう。</p> <p> </p> <pre># H30 春 import math data = [60, 35, 45, 15, 5, 10, 20] heap = [] hnum = len(data) def lchild(i): i = 2 * i + 1 return i def rchild(i): i = 2 * i + 2 return i def parent(i): i = math.floor((i - 1) / 2) return i def makeHeap(data, heap, hnum): for i in range(0, hnum): heap.append(data[i]) for i in range(0, hnum): # heap.append(data[i]) k = i # Because k = 0, under process is never used...why? while k &gt; 0: if heap[k] &gt; heap[parent(k)]: swap(heap, k, heap[k]) k = parent(k) else: break def swap(heap, i, j): tmp = int() tmp = heap[i] heap[i] = heap[j] heap[j] = tmp def heapSort(data, heap, hnum): last = hnum - 1 makeHeap(data, heap, hnum) for last in reversed(range(0, hnum)): swap(heap, 0, last) downHeap(heap, last - 1) def downHeap(heap, hlast): n = 0 if lchild(n) &lt;= hlast: tmp = lchild(n) if rchild(n) &lt;= hlast: if heap[tmp] &lt;= heap[rchild(n)]: tmp = rchild(n) if heap[tmp] &gt; heap[n]: swap(heap, n, tmp) else: return n = tmp print("Before:", data) heapSort(data, heap, hnum) print("After:", heap) </pre> <p> </p> <p>配列parentでは、小数点以下を切り捨てた値を格納するため、mathライブラリを使用しています。</p> <p>コードを実行すると、整列前と後の結果を表示するようにしています。</p> <p> </p> <pre>Before: [60, 35, 45, 15, 5, 10, 20] After: [5, 10, 15, 20, 35, 45, 60] </pre> <p> </p> <p>今回のコードは予想した結果通りに動くのですが、二つ分からない点があります。</p> <p> </p> <p>一つ目に、「# Because k = 0, under process is never used...why?」の部分。</p> <p><code>while k &gt; 0:</code> 以下の処理は何に使うのでしょうか。。。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D6%A5%EC%A1%BC%A5%AF%A5%DD%A5%A4%A5%F3%A5%C8">ブレークポイント</a>を置いても、処理に使われなかったような。。。</p> <p> </p> <p>二つ目に、<strong>本当は正しく整列されない</strong>という点です。</p> <p>整列対象の数値で、先頭の数値を、他の数値よりも低くした場合、正しくありません。</p> <p>また、先頭以外の数値を、先頭よりも高くした場合も、正しくなりません。</p> <p>これはミスだと思います。</p> <p>ですので、まるごとコピーしたり、写経するのはあまりお勧めできません。</p> <p>むしろ、正しくない部分を指摘できる方がおられれば、コメント欄に投稿をお願いします。</p> <p> </p> <p> </p> <p>以上</p> <p> </p> <p> </p> <p> </p> yuki_sasano 基本情報技術者試験のデータ構造及びアルゴリズム問題をPythonで実装する(平成三十年度秋期)。 hatenablog://entry/13574176438062315260 2022-02-11T18:30:39+09:00 2022-02-11T18:37:52+09:00 トレースって大事だよね。 はろー、yukiです。 他の方の試験体験記を読んでも、アルゴリズム問題ではトレースが大事と言わています。 大事なのは、時間内に落ち着いてトレースし、処理内容を把握することだと思います。 今回の試験内容は、整数式の文字列処理と数値処理。 ある整数式から文字列を解析処理し、配列と変数を用いて数値を計算処理するもの。 実装したのは下記。 試験問題でも、プログラムは解析処理と計算処理に分かれています。 ですが、関数としては一つにまとめられていますので、それに沿います。 # H30 秋 # examle Expression = ['2', '*', '(', '3', '4'… <p>トレースって大事だよね。</p> <p> </p> <p>はろー、<a class="keyword" href="http://d.hatena.ne.jp/keyword/yuki">yuki</a>です。</p> <p> </p> <p>他の方の試験体験記を読んでも、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%EB%A5%B4%A5%EA%A5%BA%A5%E0">アルゴリズム</a>問題ではトレースが大事と言わています。</p> <p>大事なのは、時間内に落ち着いてトレースし、処理内容を把握することだと思います。</p> <p> </p> <p>今回の試験内容は、整数式の文字列処理と数値処理。</p> <p>ある整数式から文字列を解析処理し、配列と変数を用いて数値を計算処理するもの。</p> <p> </p> <p>実装したのは下記。</p> <p>試験問題でも、プログラムは解析処理と計算処理に分かれています。</p> <p>ですが、関数としては一つにまとめられていますので、それに沿います。</p> <p> </p> <pre># H30 秋 # examle Expression = ['2', '*', '(', '3', '4', '-', '(', '5', '+', '6', '7', ')', '/', '8'] ExpLen = len(Expression) def Compute(Expression, ExpLen): Operator = [] OpCnt = 0 Priority = [] <a class="keyword" href="http://d.hatena.ne.jp/keyword/Value">Value</a> = [] chr = 0 i = 0 ip = 0 nest = 0 <a class="keyword" href="http://d.hatena.ne.jp/keyword/Value">Value</a> = [OpCnt] # Analysis for i in range(i, ExpLen): chr = Expression[i] if '0' &lt;= chr and chr &lt;= '9': <a class="keyword" href="http://d.hatena.ne.jp/keyword/Value">Value</a>[OpCnt] = 10 * <a class="keyword" href="http://d.hatena.ne.jp/keyword/Value">Value</a>[OpCnt] + int(chr) if chr == '+' or chr == '-' or chr == '*' or chr == '/': Operator.append(chr) #Operator[OpCnt] = chr -&gt; list index out of range if chr == '+' or chr == '-': Priority.append(nest + 1) #Priority[OpCnt] = nest + 1 -&gt; list index out of range else: Priority.append(nest + 2) #Priority[OpCnt] = nest + 2 -&gt; list index out of range OpCnt = OpCnt + 1 <a class="keyword" href="http://d.hatena.ne.jp/keyword/Value">Value</a>.append(0) if chr == '(': nest = nest + 10 if chr == ')': nest = nest - 10 print("<a class="keyword" href="http://d.hatena.ne.jp/keyword/Value">Value</a>[]:", <a class="keyword" href="http://d.hatena.ne.jp/keyword/Value">Value</a>) print("Operator[]:", Operator) print("Priority[]:", Priority) print("OpCnt:", OpCnt) # Calculate i = 1 #if OpCnt &gt; 0: while OpCnt &gt; 0: ip = 0 for i in range(1, OpCnt): if Priority[ip] &lt; Priority[i]: ip = i chr = Operator[ip] if chr == '+': <a class="keyword" href="http://d.hatena.ne.jp/keyword/Value">Value</a>[ip] = <a class="keyword" href="http://d.hatena.ne.jp/keyword/Value">Value</a>[ip] + <a class="keyword" href="http://d.hatena.ne.jp/keyword/Value">Value</a>[ip + 1] if chr == '-': <a class="keyword" href="http://d.hatena.ne.jp/keyword/Value">Value</a>[ip] = <a class="keyword" href="http://d.hatena.ne.jp/keyword/Value">Value</a>[ip] - <a class="keyword" href="http://d.hatena.ne.jp/keyword/Value">Value</a>[ip + 1] if chr == '*': <a class="keyword" href="http://d.hatena.ne.jp/keyword/Value">Value</a>[ip] = <a class="keyword" href="http://d.hatena.ne.jp/keyword/Value">Value</a>[ip] * <a class="keyword" href="http://d.hatena.ne.jp/keyword/Value">Value</a>[ip + 1] if chr == '/': <a class="keyword" href="http://d.hatena.ne.jp/keyword/Value">Value</a>[ip] = <a class="keyword" href="http://d.hatena.ne.jp/keyword/Value">Value</a>[ip] / <a class="keyword" href="http://d.hatena.ne.jp/keyword/Value">Value</a>[ip + 1] for i in range(ip + 1, OpCnt): <a class="keyword" href="http://d.hatena.ne.jp/keyword/Value">Value</a>[i] = <a class="keyword" href="http://d.hatena.ne.jp/keyword/Value">Value</a>[i + 1] Operator[i - 1] = Operator[i] Priority[i - 1] = Priority[i] OpCnt = OpCnt - 1 print("<a class="keyword" href="http://d.hatena.ne.jp/keyword/Value">Value</a>[0]:", <a class="keyword" href="http://d.hatena.ne.jp/keyword/Value">Value</a>[0]) return <a class="keyword" href="http://d.hatena.ne.jp/keyword/Value">Value</a>[0] Compute(Expression, ExpLen) </pre> <p> </p> <p>要は「2*(34-(5+67)/8)」の計算問題です。</p> <p>それぞれの文字を配列に分類し、計算順序を正しく処理することになります。</p> <p>計算結果は50になります。</p> <p>上記のコードでは、各配列と変数に代入する値を出力するようにしています。</p> <p>それが次のものです。</p> <p> </p> <pre><a class="keyword" href="http://d.hatena.ne.jp/keyword/Value">Value</a>[]: [2, 34, 5, 67, 8] Operator[]: ['*', '-', '+', '/'] Priority[]: [2, 11, 21, 12] OpCnt: 4 Value[0]: 50.0 </pre> <p> </p> <p>それぞれの配列には、数値、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B1%E9%BB%BB%BB%D2">演算子</a>、(計算のための)優先順序が入っています。</p> <p>そして最終的に、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Value">Value</a>[0]すなわち計算結果が50になっています。</p> <p> </p> <p>この試験では、<a href="https://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2018h30.html" target="_blank">IPAが出している解説</a>にもありますが、トレースする能力を問うています。</p> <p>前述した通り、時間内に落ち着いてトレースしたいものです。</p> <p> </p> <p> </p> <p> </p> <p>以上。</p> <p> </p> <p> </p> <p> </p> yuki_sasano 基本情報技術者試験のデータ構造及びアルゴリズム問題をPythonで実装する(平成三十一年度春期)。 hatenablog://entry/13574176438062295366 2022-02-11T17:38:43+09:00 2022-02-11T17:38:43+09:00 ハフマン符号って普通ですか? はろー、yukiです。 少し前にプログラミングに数学は必要かどうか、話題になったことがありました。 必要かどうかは、何を開発するかによるので、議論としては不毛ですかね。 どちらかというと、コードの保守がしっかりできるエンジニアの方が優れていると思います。 職業エンジニアとしては。 とはいっても、プログラミングに数学的考えがあると良いのは事実です。 それと、しっかりとデータ構造やアルゴリズムを知っておくのも良いと思います。 プログラミング以外の場でも、そういったことが時折役立つこともありますよね。 さて、今回の内容はハフマン符号について。 試験では、アルファベットA… <p>ハフマン符号って普通ですか?</p> <p> </p> <p>はろー、<a class="keyword" href="http://d.hatena.ne.jp/keyword/yuki">yuki</a>です。</p> <p> </p> <p>少し前にプログラミングに数学は必要かどうか、話題になったことがありました。</p> <p>必要かどうかは、何を開発するかによるので、議論としては不毛ですかね。</p> <p>どちらかというと、コードの保守がしっかりできるエンジニアの方が優れていると思います。</p> <p>職業エンジニアとしては。</p> <p> </p> <p>とはいっても、プログラミングに数学的考えがあると良いのは事実です。</p> <p>それと、しっかりとデータ構造や<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%EB%A5%B4%A5%EA%A5%BA%A5%E0">アルゴリズム</a>を知っておくのも良いと思います。</p> <p>プログラミング以外の場でも、そういったことが時折役立つこともありますよね。</p> <p> </p> <p>さて、今回の内容は<a href="https://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%95%E3%83%9E%E3%83%B3%E7%AC%A6%E5%8F%B7" target="_blank">ハフマン符号</a>について。</p> <p>試験では、アルファベットA, B, C, Dの4種類の文字からなる文字列を圧縮します。</p> <p>出現回数の多い文字時を短く、少ないものを長くビット列を割り当てます。</p> <p> </p> <p>実装したコードは下記。</p> <p> </p> <pre># H31春 text = "AAAABBCDCDDACCAAAAA" # text = "ABBBBBBBCCCDD" strList = [] freq = [] # To set values to array and sort ascending. for i in text: strList.append(i) sortedStrList = sorted(set(strList), key=strList.index) # To count values. for i, s in enumerate(sortedStrList): if s in text: # set count values. freq.append(text.count(s)) # Initialize size = len(freq) # To set -1 to all elements. parent = [-1] * len(freq) left = [-1] * len(freq) right = [-1] * len(freq) nsize = 0 node = [] def Huffman(size, parent, left, right, freq): i = 0 j = 0 SortNode(size, parent, freq) while nsize &gt;= 2: i = node[0] j = node[1] left.append(i) right.append(j) freq.append(freq[i] + freq[j]) # size become len + 1, so parent add one elem for SortNode(). parent.append(-1) parent[i] = size parent[j] = size size = size + 1 SortNode(size, parent, freq) def SortNode(size, parent, freq): global nsize, node nsize = 0 node = [] for i in range(0, size): if parent[i] &lt; 0: node.append(i) nsize = nsize + 1 Sort(freq, nsize) def Sort(freq, nsize): # node is global variable. The values store in SortNode(). # and node type is tuple for unzip sortFreq. # If node is argument, node type is list. # This case is NOT be used values after unzip sortFreq. global node sortFreq = [] # The array is elem's number and <a class="keyword" href="http://d.hatena.ne.jp/keyword/value">value</a>. Ascending order by <a class="keyword" href="http://d.hatena.ne.jp/keyword/value">value</a>. # freq has values of A-D and node has number(order). for i in node: # ex.) ('A', 0), ('A', 1), ('A', 2)...('B', 4)...('D', 7)... sortFreq.append((freq[i], i)) sortFreq.sort() # unzip sortedFreq, node = zip(*sortFreq) def Encode(k, parent, left): global param if parent[k] &gt;= 0: Encode(parent[k], parent, left) if left[parent[k]] == k: # print("0") param = param + '0' else: # print("1") param = param + '1' Huffman(size, parent, left, right, freq) # Result resultBit = [] for k in range(len(sortedStrList)): param = '' Encode(k, parent, left) resultBit.append(param) resultList = list(zip(sortedStrList, resultBit)) print(resultList) </pre> <p> </p> <p>変数textに与えている文字列は二通り。</p> <p>「AAAABBCDCDDACCAAAAA」と「ABBBBBBBCCCDD」です。</p> <p>前者は順番に、A -&gt; C -&gt; D -&gt; Bとなります。</p> <p>後者は順番に、B -&gt; C -&gt; D -&gt; Aとなります。</p> <p>よって、</p> <p>前者は、[('A', '1'), ('B', '010'), ('C', '00'), ('D', '011')]が出力結果となります。</p> <p>後者は、[('A', '010'), ('B', '1'), ('C', '00'), ('D', '011')]が出力結果となります。</p> <p>仕組み自体は試験問題の図2を見ると分かると思います。</p> <p> </p> <p> </p> <p> </p> <p>以上</p> <p> </p> <p> </p> <p> </p> yuki_sasano 基本情報技術者試験のデータ構造及びアルゴリズム問題をPythonで実装する(令和元年度秋期)。 hatenablog://entry/13574176438051345545 2022-01-10T17:45:14+09:00 2022-01-10T17:45:14+09:00 手当てが出るからこそ試験を受ける。 はろー、yukiです。 クラウドエンジニアをしていた時、取得した資格はほとんど民間のものでした。 例えば、CCNA、LPIC、Google Cloudなど。 IPAの資格はSG(情報セキュリティマネジメント)だけ持っていて、その他は未取得でした。 この度、会社から手当てが出ることが分かりましたので、勉強を開始しようと思います。 取得対象はレベルの低いところからで、基本情報技術者試験からにします。 FEを調べてみると、ネックとなるのは午後のアルゴリズム試験とのこと。 確かにアルゴリズム試験は、アルゴリズムやデータ構造が分からないと難しいと思います。 (トレース… <p>手当てが出るからこそ試験を受ける。</p> <p> </p> <p>はろー、<a class="keyword" href="http://d.hatena.ne.jp/keyword/yuki">yuki</a>です。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AF%A5%E9%A5%A6%A5%C9">クラウド</a>エンジニアをしていた時、取得した資格はほとんど民間のものでした。</p> <p>例えば、<a class="keyword" href="http://d.hatena.ne.jp/keyword/CCNA">CCNA</a>、<a class="keyword" href="http://d.hatena.ne.jp/keyword/LPIC">LPIC</a>、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Google">Google</a> Cloudなど。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/IPA">IPA</a>の資格はSG(<a href="https://www.jitec.ipa.go.jp/1_11seido/sg.html" target="_blank">情報セキュリティマネジメント</a>)だけ持っていて、その他は未取得でした。</p> <p> </p> <p>この度、会社から手当てが出ることが分かりましたので、勉強を開始しようと思います。</p> <p>取得対象はレベルの低いところからで、<a href="https://www.jitec.ipa.go.jp/1_11seido/fe.html" target="_blank">基本情報技術者試験</a>からにします。</p> <p>FEを調べてみると、ネックとなるのは午後の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%EB%A5%B4%A5%EA%A5%BA%A5%E0">アルゴリズム</a>試験とのこと。</p> <p>確かに<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%EB%A5%B4%A5%EA%A5%BA%A5%E0">アルゴリズム</a>試験は、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%EB%A5%B4%A5%EA%A5%BA%A5%E0">アルゴリズム</a>やデータ構造が分からないと難しいと思います。</p> <p>(トレースも途中で分からなくなってしまうかも)</p> <p> </p> <p>せっかく勉強をするので、実装してみようと思います。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%ED%A5%B0%A5%E9%A5%DF%A5%F3%A5%B0%B8%C0%B8%EC">プログラミング言語</a>は、僕が多用していた<a class="keyword" href="http://d.hatena.ne.jp/keyword/python">python</a>になります。</p> <p> </p> <p>今回は令和元年の秋期試験になります。</p> <p>テーマは「<a href="https://ja.wikipedia.org/wiki/Bitap%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0" target="_blank">Bitap法</a>による文字列検索」です。</p> <p> </p> <p>コードは下記。</p> <pre># R1 Pat = ["A", "C", "A", "B", "A", "B"] Mask = [0, 0, 0, 0, 0, 0] # [1]..[26] tText = ["A", "A", "C", "B", "B", "A", "A", "C", "A", "B", "A", "B", "A", "B"] def Index(str): Alphabet = ["A", "B", "C", "D"] # "A".."Z" num = 0 for i in Alphabet: if str == i: # To return ordinal number: A -&gt; num = 0, B -&gt; num = 1 return num # If not match Pat and Alphabet, increment ordinal. num = num + 1 def GenerateBitMask(Pat, Mask): PatLen = len(Pat) for i in range(1, 7): # 1..26 # Initialize Mask[i - 1] = 0 for i in range(1, 7): # 1..26 # To binary by using |(vertical bar). Mask[Index(Pat[i - 1])] = 1 &lt;&lt; (i - 1) | Mask[Index(Pat[i - 1])] print("Mask[1]=", bin(Mask[0])) print("Mask[2]=", bin(Mask[1])) print("Mask[3]=", bin(Mask[2])) return PatLen def BitapMatch(tText, Pat): tTextLen = len(tText) PatLen = GenerateBitMask(Pat, Mask) Status = 0 Goal = 1 &lt;&lt; (PatLen - 1) for i in range(1, tTextLen): Status = Status &lt;&lt; 1 | 1 Status = Status &amp; Mask[Index(tText[i])] if Status &amp; Goal != 0: # +1 is for <a class="keyword" href="http://d.hatena.ne.jp/keyword/python">python</a> list' spec print(i - PatLen + 1 + 1) return i - PatLen + 1 + 1 return -1 BitapMatch(tText, Pat) </pre> <p> </p> <p>Bitap法では、ビット列により文字を定義し、対象文字列と合致する位置を検索します。</p> <p>実行後、検索文字列(Pat)が対象文字列(tText)内で合致した位置を返します。</p> <p>コードでは、tTextの7個目からPatの文字列が全て合致するので、求めるべき数は7になります。</p> <p> </p> <p>本来はアルファベットは26字で、配列もその分必要ですが、問題に合わせて省略しています。</p> <p>また、<a class="keyword" href="http://d.hatena.ne.jp/keyword/python">python</a>ではビット化(2進数へ変換)にbin()を使いますが、コードではprint()で対象文字列のマスク値を出力するために使っています。</p> <p>処理内(例えば、左シフトとMask[]の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CF%C0%CD%FD%CF%C2">論理和</a>)で使うと、bin()で変換した値はstr型になるため、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CF%C0%CD%FD%CF%C2">論理和</a>が求められません。<br /> ※というより、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CF%C0%CD%FD%CF%C2">論理和</a>によってビット化される</p> <p>求めるべき数(配列内で合致する部分の最初の序数)はPatLenに入ります。</p> <p>PatLenは配列長ですので、最終的にはprint(i - PatLen + 1 + 1)で1を足しています。<br /> ※配列の最初の序数は[0]</p> <p> </p> <p> </p> <p>こちらの方の内容が大変参考になります。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fkanappphateshakitto.hateblo.jp%2Fentry%2F2020%2F04%2F18%2F163136" title="基本情報技術者アルゴリズムの問題をPythonでコーディングしてみた【令和元年秋】 - 理系母の趣味はプログラミング" class="embed-card embed-blogcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;"></iframe></p> <p> </p> <p> </p> <p> </p> <p>以上</p> <p> </p> <p> </p> <p> </p> yuki_sasano Hello Talkで出会った中国人にプレゼントを買わされそうになり、クレジットカード情報を抜き取られかねなかった話。 hatenablog://entry/13574176438049111125 2022-01-03T22:35:15+09:00 2022-01-03T22:35:15+09:00 あれ、気付いたら一年以上もブログ更新していない。。。 はろー、yukiです。 実は中国語も勉強しています。 勉強はHSKを中心にしていますが、インターネットやアプリで息抜きすることもあります。 中国語でコミュニケーションができるアプリに、Hello Talkが紹介されます。 今回は、そのHelloTalkで知り合った中国人とのチャットで起きたことのご報告です。 相手は女性で、Hello TalkからLINEへ場所を移し、チャットをしているうちに段々と仲が良くなりました。 ※Hello TalkではLINEなどのアカウントを聞き出すこと自体がNG ある日、相手が悩みを吐露し、聞いたこちら側にプレ… <p>あれ、気付いたら一年以上もブログ更新していない。。。</p> <p> </p> <p>はろー、<a class="keyword" href="http://d.hatena.ne.jp/keyword/yuki">yuki</a>です。</p> <p> </p> <p>実は中国語も勉強しています。</p> <p>勉強は<a class="keyword" href="http://d.hatena.ne.jp/keyword/HSK">HSK</a>を中心にしていますが、インターネットやアプリで息抜きすることもあります。</p> <p> </p> <p>中国語でコミュニケーションができるアプリに、<a href="https://www.hellotalk.com/?lang=ja" target="_blank">Hello Talk</a>が紹介されます。</p> <p>今回は、そのHelloTalkで知り合った中国人とのチャットで起きたことのご報告です。</p> <p> </p> <p>相手は女性で、Hello <a class="keyword" href="http://d.hatena.ne.jp/keyword/Talk">Talk</a>からLINEへ場所を移し、チャットをしているうちに段々と仲が良くなりました。</p> <p> <strong>※Hello <a class="keyword" href="http://d.hatena.ne.jp/keyword/Talk">Talk</a>ではLINEなどのアカウントを聞き出すこと自体がNG</strong></p> <p>ある日、相手が悩みを吐露し、聞いたこちら側にプレゼントを贈りたいと。</p> <p>すると、住所やTEL、メールアドレスが聞き出されます(名前は聞き出されない)。</p> <p>メールアドレスを教えると、メールが届き、プレゼント(高級な茶葉)の購入通知が入ります。</p> <p> ※購入したのは相手</p> <p> </p> <p>メールを受信した旨をチャットすると、相手は自分の誕生日が来週にあるとのこと。</p> <p>こちら側にもプレゼントを送ってほしいと言われます。</p> <p>購入を渋ると、しつこくお願い&amp;スタンプが送られ続けます。</p> <p> </p> <p>そのチャットの一部が下記です。</p> <pre>我现在很不开心,很难受 今天在我爸妈家吃饭,一切都很好。突然来了一位新的客人。我不认识年龄和我差不多,上来跟我自我介绍。我那时候有点蒙。后来我妈跟我说这是哪家阿姨的儿子,来我们家吃饭、这时我在明白,是安排的一场相亲。我很不开心,为什么我妈不跟我说。我不喜欢相亲这个过程。 自从我跟我前男友分开以后我受到的很大的伤害。所以我都我自己的感情很谨慎。可是我觉得相亲这个过程他并不完美。如果我相亲成功了,之后男的对我不好怎么办呢!!我考虑到这些问题我就很讨厌相亲 我是那种比较独立的女人。从我读完高中开始,我家里没有给我一分钱,都是我自己兼职赚钱养活我自己。不是说我爸妈对我不好。我是不喜欢依靠。我想自己独立起来。做一个女强人 所以我对我自己的感情有自己的想法,不喜欢相亲,介绍啊这些。我相信缘分。我一定会遇到那个爱我的男人的。只是时间问题 然后我在家没有吃多少饭,急忙说我有事我就先回我自己家了。 回到家后,我打电话叫我朋友她们出来陪我喝一点酒。跟他们谈了我今天发生的事情,得到了她们的安慰。舒服了许多 我们喝完酒之后,准备走。我看到我的那些姐妹们都有自己的男朋友、老公接回家,那时候我心里非常非常的痛苦,所有人都在关心着、被爱着。只有我一个人没有人爱。 那一瞬间感觉好像自己成为了一个被世界遗弃的孤儿。但是在我朋友面前还是得忍着。假装什么事都没有发生羡慕的眼神也伪装成为她们高兴而出现的欣慰眼神 直到被代驾接回家,终于忍不住了。我以为我可以一个人生活的很好。平时跟朋友们笑嘻嘻的开<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B4%E1%BE%D0">玩笑</a>,其实我更像一只小丑,我以为我喝了酒可以忘记以前那些不开心的事情,我以为我会快乐下去。 可我发现我自己做不到,我还是会羡慕别人,我就会想起来以前的事情 我以前只想找一个人说说话我想把心里的话说出来,憋在自己心里很久了,没有人可以诉说。我也不想和自己爸妈讲,他们只会每天给我安排相亲。我受不了,这不是我想要的爱情 你愿意听我讲的这些话吗?是不是影响了你的心情。如果影响了我很抱歉 说出了憋在心里很多年的事情,现在好受多了,非常感谢你,愿意听我说这些话,真的要感谢你,这些事情跟我一般的朋友说,大概都会觉得不耐烦吧,你能这么耐心的听着,真的很感激 谢谢,你是真心对待我的人 好像酒精开始伤害我的脑袋了 我的头很重,开始晕乎乎的 </pre> <p> </p> <p>8分にわたる内容ですが、そんな短時間でこんなに入力できるものですか?</p> <p> ※こちらからは返信をしていないので一方的な文章</p> <p>その後、プレゼントを購入するサイトとして提示されたのが、下のURLです。</p> <p> </p> <p><a href="https://www.yougoushopp.com/" target="_blank">https://www.yougoushopp.com/</a></p> <p> </p> <p> </p> <p>試しに何か一つ商品を画像検索してみます。</p> <p> </p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fwww.google.com%2Fsearch%3Ftbs%3Dsbi%3AAMhZZivDT1OP0TMF895keHPvNsPqBj7ZiqSAgv02vddyLuKIQs2QcpS0sumlhYTkRUQiCjHh1Kp0RWADF4aStq2fQCrXbrwERFxpDoD8IbmdlWrCWPTHKZ4jGQWNRjDJJ1NvSkWQNN0113tHsObZ6EZ5zX4qEKx9T314RwmwxHxr6QJeEwl1wdGrcBDeFq8Xtnb7REE-8_1MypemUBGZe7H8me6Kd7Bm_1o5b7K-JuzGiaW8H7QQAg9IltjtH2UwMPvY_1aDM9P-9-iMcexpH6itLcgtT8luNsYiGZxoC4ibA1K29CsDD_1_1nGx5TDJojuoXF5-dBmq-VuBUQqh02BIVfetHu5iinDB4k0cLLD9QzJg2Idj1n5pNv_1uVNVb0kjjyBFQuGSYGc3CCu-TkOlBsV8wklre07CNcNg" title="Google" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe></p> <p> </p> <p> </p> <p>すると、同じ画像を掲載しているサイトが見つかります。<br />それが下のURL。</p> <p> </p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fwww.boutique-mall8.shop%2F" title="www.boutique-mall8.shop" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="https://www.boutique-mall8.shop/"> </a></cite></p> <p> </p> <p> </p> <p>(被害にあっていないと詐欺とは言えないので、怪しいサイトとして考察すると、、)</p> <p>例えば、About usのページを見ると分かりますが、上2つのサイトでは内容が同じ文章になっています(ただし、上のURLは英語のみ、下のURLは日本語)。</p> <p> </p> <p>また、それぞれのサイトのフッターに<a class="keyword" href="http://d.hatena.ne.jp/keyword/SNS">SNS</a>アイコンがありますが、リンクはつながっていません。</p> <p> ※個人サイトや起業したての会社HPではよくみられますが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/EC%A5%B5%A5%A4%A5%C8">ECサイト</a>ではありえないかな。。。</p> <p> </p> <p>ページを次に進んでいくと、<a class="keyword" href="http://d.hatena.ne.jp/keyword/SNS">SNS</a>連携を求められます(連携したらアカウントを乗っ取られるかも)。</p> <p>おそらく、どれか商品を購入させ、その商品代をだまし取り、カード情報も取ろうとするのがやり方と思われます。</p> <p> </p> <p>ちなみに、探していたら下のURLも見つかりました。</p> <p>このサイトにはtestを含むページがいくつか見られるので、それぞれ(上のサイトのように)ベースになっているのかも。</p> <p> </p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fwww.ymcart.com%2F" title="Shapewear and sportswear wholesale online. Dropship OEM ODM custom logo available. xxxxxxx" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe></p> <p> </p> <p>日本人は日本人には厳しいですが、外国人相手には寛容になる傾向があります。</p> <p>特に、外国語を学んでいると、自分が初心者なので優しくしてほしいのか、相手に優しくしようとしてしまいます(<a href="https://ja.wikipedia.org/wiki/%E4%BA%92%E6%81%B5%E7%9A%84%E5%88%A9%E4%BB%96%E4%B8%BB%E7%BE%A9" target="_blank">互恵的利他主義</a>)。</p> <p>これは中国語に限らず、韓国語や英語でも起こりうることです。</p> <p> </p> <p>海外志向の方や、将来的に海外進出を狙っている方、外国人とコミュニケーションを取る際には心構えを切り替えられると良いと思います。</p> <p>でも自分から(被害にあわない程度に)騙されにいくと、相手は乗り気でコミュニケーションを取ってくるので、そういう意味では上達の近道になるかもしれませんね。</p> <p> </p> <p> </p> <p>以上。</p> <p> </p> <p> </p> <p> </p> yuki_sasano pyenvを使ってpythonのバージョン管理をする。【windows10】 hatenablog://entry/26006613669920402 2020-12-25T22:19:37+09:00 2020-12-25T22:22:39+09:00 pythonが最新版でも、他のライブラリとかが対応していないことが常。 はろー、yukiです。 今回はpyenvを使い、pythonのバージョン管理をしようと思います。 環境はwindows10です。 さっそく見ていきましょう。 1. pipを使ってpyenvのインストール 下記のコマンドを実行します(powershellの場合)。 pip install pyenv-win --target "$HOME\.pyenv" それ以外の場合は公式を参照してください。 2. PYENVとPYENV_HOMEを「ユーザの環境変数」に追加 下記のコマンドを実行します。 [System.Environm… <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/python">python</a>が最新版でも、他のライブラリとかが対応していないことが常。</p> <p><br></p> <p>はろー、<a class="keyword" href="http://d.hatena.ne.jp/keyword/yuki">yuki</a>です。</p> <p><br></p> <p>今回はpyenvを使い、<a class="keyword" href="http://d.hatena.ne.jp/keyword/python">python</a>のバージョン管理をしようと思います。<br /> 環境はwindows10です。</p> <p><br></p> <p>さっそく見ていきましょう。</p> <p><br></p> <h3>1. pipを使ってpyenvのインストール</h3> <p>下記のコマンドを実行します(<a class="keyword" href="http://d.hatena.ne.jp/keyword/powershell">powershell</a>の場合)。</p> <pre class="code" data-lang="" data-unlink>pip install pyenv-win --target &#34;$HOME\.pyenv&#34;</pre> <p><br></p> <p>それ以外の場合は<a href="https://github.com/pyenv-win/pyenv-win">公式</a>を参照してください。</p> <p><br> <br></p> <h3>2. PYENVとPYENV_HOMEを「ユーザの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B4%C4%B6%AD%CA%D1%BF%F4">環境変数</a>」に追加</h3> <p>下記のコマンドを実行します。</p> <pre class="code" data-lang="" data-unlink>[System.Environment]::SetEnvironmentVariable(&#39;PYENV&#39;,$env:USERPROFILE + &#34;\.pyenv\pyenv-win\&#34;,&#34;User&#34;) [System.Environment]::SetEnvironmentVariable(&#39;PYENV_HOME&#39;,$env:USERPROFILE + &#34;\.pyenv\pyenv-win\&#34;,&#34;User&#34;)</pre> <p><br></p> <p>コマンドが難しいという方は、「システムのプロパティ > <a class="keyword" href="http://d.hatena.ne.jp/keyword/%B4%C4%B6%AD%CA%D1%BF%F4">環境変数</a> > &lt;ユーザ名>のユーザー<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B4%C4%B6%AD%CA%D1%BF%F4">環境変数</a>」の「新規」で追加します。</p> <p><br> <br></p> <h3>3. コマンドのパスを通す</h3> <p>下記のコマンドを実行します。</p> <pre class="code" data-lang="" data-unlink>[System.Environment]::SetEnvironmentVariable(&#39;path&#39;, $HOME + &#34;\.pyenv\pyenv-win\bin;&#34; + $HOME + &#34;\.pyenv\pyenv-win\shims;&#34; + $env:Path,&#34;User&#34;)</pre> <p> <br></p> <p>ここまでを完了すると、<code>pyenv version</code>が実行できると思います。</p> <p><br> <br></p> <h3>4. pyenvのアップデート</h3> <p><code>pyenv update</code>を実行します。<br />  ※アップデートをしないと、最新版の<a class="keyword" href="http://d.hatena.ne.jp/keyword/python">python</a>がインストール対象になっていない場合がある</p> <p><br> <br></p> <h3>5. 必要なバージョンの<a class="keyword" href="http://d.hatena.ne.jp/keyword/python">python</a>をインストール</h3> <p><code>pyenv install -l</code>でインストールできるバージョン一覧を取得します。<br /> 上記で取得したバージョンをコピーし、<code>pyenv install &lt;version&gt;</code> の<code>&lt;version&gt;</code>の部分に貼り付けて実行します。</p> <p><br> <br></p> <h3>6. 実行環境ごとにバージョンを使い分ける(全体)</h3> <p>僕の場合、全体的には最新版を使い、とある開発環境ではバージョンの古いものを使用しています。</p> <p><br></p> <p>まず、全体の設定をします(コマンドの実行場所はどこでも可)。<br /> <code>pyenv global &lt;version&gt;</code>で、<code>&lt;version&gt;</code>はインストールした(全体で使いたい)ものを指定します。<br /> その後、<code>pyenv rehash</code>を実行します。<br />  ※<code>\.pyenv\pyenv-win\shims</code>フォルダ内にファイルが生成される<br />  ※これを実行しないと反映されない</p> <p><br></p> <p><code>python --version</code>を実行し、<a class="keyword" href="http://d.hatena.ne.jp/keyword/python">python</a>が上記のバージョンになっていることを確認します。</p> <p><br> <br></p> <h3>7. 実行環境ごとにバージョンを使い分ける(開発環境)</h3> <p>開発環境のあるフォルダへ移動します。</p> <p><br></p> <p>開発環境で必要なバージョンをインストールしておきます。<br /> <code>pyenv local &lt;version&gt;</code>で、<code>&lt;version&gt;</code>はインストールしたものを指定します。<br /> その後、<code>pyenv rehash</code>を実行します。<br />  ※<code>\.pyenv\pyenv-win\shims</code>フォルダ内に上記バージョンのファイルが追加される<br />  ※これを実行しないと反映されない(2回目)</p> <p><br></p> <p><code>python --version</code>を実行し、開発環境での<a class="keyword" href="http://d.hatena.ne.jp/keyword/python">python</a>のバージョンが上記になっていることを確認します。<br />  ※<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リを一階層移動し、バージョン確認すると、最初に設定した(<code>global</code>)バージョンになっている</p> <p><br> <br></p> <p>ちなみに、現在の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リで、設定されている<a class="keyword" href="http://d.hatena.ne.jp/keyword/python">python</a>がどのバージョンか分からない場合、<code>pyenv versions</code>を実行します。<br /> インストールしたpyhonのバージョンが一覧で表示され、設定されているものに<code>* 3.9.1 (set by 略</code>が付されています。</p> <p><br> <br></p> <p>これで開発環境は整いましたね。</p> <p><br></p> <p>以上。</p> <p><br> <br> <br></p> yuki_sasano 都道府県別の犬猫の殺処分数について hatenablog://entry/26006613657991386 2020-11-28T18:20:41+09:00 2020-11-28T18:23:54+09:00 数値で見ると重みが分かる命の数。 はろー、yukiです。 コロナ情勢が長引くようで、犬猫を飼育する世帯が心配です。 それほど豊かでない世帯が飼っていた犬猫が捨てられるとか。 在宅勤務中に飼い始めたが、出社勤務に戻り、面倒をみられなくなったとか。 犬猫の殺処分数は、環境省がとりまとめ、統計資料として情報公開しています。 上のページの「犬・猫の引取り及び負傷動物等の収容並びに処分の状況」の部分です。 この資料はPDFファイルで公開されていて見やすいのですが、データ処理には不向きです。 個人的に知りたかったのは下記の数字です。 ・「犬・猫の引取り及び処分の状況(都道府県・指定都市・中核市)」のページ… <p>数値で見ると重みが分かる命の数。</p> <p> </p> <p>はろー、<a class="keyword" href="http://d.hatena.ne.jp/keyword/yuki">yuki</a>です。</p> <p> </p> <p>コロナ情勢が長引くようで、犬猫を飼育する世帯が心配です。</p> <p>それほど豊かでない世帯が飼っていた犬猫が捨てられるとか。</p> <p>在宅勤務中に飼い始めたが、出社勤務に戻り、面倒をみられなくなったとか。</p> <p> </p> <p>犬猫の殺処分数は、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B4%C4%B6%AD%BE%CA">環境省</a>がとりまとめ、統計資料として情報公開しています。</p> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="環境省_統計資料 「動物愛護管理行政事務提要」 [動物の愛護と適切な管理]" src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fwww.env.go.jp%2Fnature%2Fdobutsu%2Faigo%2F2_data%2Fstatistics%2Fgyosei-jimu.html" frameborder="0" scrolling="no"></iframe></p> <p>上のページの「犬・猫の引取り及び負傷動物等の収容並びに処分の状況」の部分です。</p> <p> </p> <p>この資料はPDFファイルで公開されていて見やすいのですが、データ処理には不向きです。</p> <p>個人的に知りたかったのは下記の数字です。</p> <p>・「犬・猫の引取り及び処分の状況(<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C5%D4%C6%BB">都道</a>府県・指定都市・<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C3%E6%B3%CB%BB%D4">中核市</a>)」のページ</p> <p> (犬・猫)合計 &gt; 処分数 &gt; 殺処分数</p> <p> ※<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C5%D4%C6%BB">都道</a>府県のみ</p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%D7%A5%EC%A5%C3%A5%C9%A5%B7%A1%BC%A5%C8">スプレッドシート</a>にまとめ、公開しています(閲覧のみ)。</p> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="犬・猫の引取り及び負傷動物等の収容並びに処分の状況" src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fdocs.google.com%2Fspreadsheets%2Fd%2F1ePF4aGKUpD03yKfSPrazZ5Hx5cLX8kbQr33iZ8Ex27c%2Fedit%3Fusp%3Dsharing" frameborder="0" scrolling="no"></iframe></p> <p> </p> <p>ご活用ください。</p> <p> </p> <p> </p> <p>デジタル庁の取り組みが期待されています。</p> <p>統計データの一部は、<a href="https://www.e-stat.go.jp/api/" target="_blank">すでにAPIで利用できる</a>ようになっています。</p> <p>他に、PDFのみで公開されている資料も、<a class="keyword" href="http://d.hatena.ne.jp/keyword/csv">csv</a>や<a class="keyword" href="http://d.hatena.ne.jp/keyword/excel">excel</a>などで提供されると良いですね。</p> <p> </p> <p> </p> <p>以上。</p> <p> </p> <p> </p> yuki_sasano 【Powershell】タブ区切りのテキストを取り出し、項目ごとに出力する。 hatenablog://entry/26006613541617733 2020-03-28T18:34:39+09:00 2022-01-10T18:38:49+09:00 Excelの表をメモ帳にコピーすると、規則性のある区切りになるよ。 はろー、yukiです。 テキストは、半角スペースで区切られることもままありますが、多くはタブ区切りになっていると思います。 タブ区切りされたテキストを別の形に出力する。その作業を手でするのは手間なので、スクリプトで実施しましょう。 今回の流れは下記です。 ーーーーーーーーーー 対象のテキストを読み込む。 項目別に分ける。 別の形に出力する。 ーーーーーーーーーー タブ区切りのテキストは、次のものを想定しています。 employee.txt 営業部 Aさん 26歳 男 技術部 Bさん 32歳 女 すぐに使いたい人は次のコードを使… <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a>の表をメモ帳にコピーすると、規則性のある区切りになるよ。</p> <p> </p> <p>はろー、<a class="keyword" href="http://d.hatena.ne.jp/keyword/yuki">yuki</a>です。</p> <p> </p> <p>テキストは、半角スペースで区切られることもままありますが、多くはタブ区切りになっていると思います。</p> <p>タブ区切りされたテキストを別の形に出力する。その作業を手でするのは手間なので、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>で実施しましょう。</p> <p> </p> <p>今回の流れは下記です。</p> <p>ーーーーーーーーーー</p> <ol> <li>対象のテキストを読み込む。</li> <li>項目別に分ける。</li> <li>別の形に出力する。</li> </ol> <p>ーーーーーーーーーー</p> <p> </p> <p>タブ区切りのテキストは、次のものを想定しています。</p> <p>employee.txt</p> <pre>営業部 Aさん 26歳 男 技術部 Bさん 32歳 女 </pre> <p> </p> <p>すぐに使いたい人は次のコードを使用してください。 </p> <pre>$list = cat .\file\employee.txt $split = $list.split("`t") $dpt = @() $name = @() $age = @() $gender = @() for($i = 0; $i -lt $split.length; $i++) { if(($i % 4) -eq 0){ $dpt += $split[$i] }elseif(($i % 4) -eq 1){ $name += $split[$i] }elseif(($i % 4) -eq 2){ $age += $split[$i] }elseif(($i % 4) -eq 3){ $gender += $split[$i] } } for($j = 0; $j -lt $name.length; $j++) { Write-Host ($name[$j] + "は" + $dpt[$j] + "で、" + $age[$j] + "の" + $gender[$j] + "です。") } </pre> <p> </p> <p> </p> <script async="" src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <p><ins class="adsbygoogle" style="display: block;" data-ad-client="ca-pub-3087197401719727" data-ad-slot="8835819497" data-ad-format="auto" data-full-width-responsive="true"> </ins></p> <script>// <![CDATA[ (adsbygoogle = window.adsbygoogle || []).push({}); // ]]></script> <p> </p> <p> </p> <p>それでは順番に見ていきましょう。</p> <p><span style="text-decoration: underline;">1. テキストの読み込み</span></p> <p>catでemployee.txtの内容を読み込み、変数$listへ代入します。</p> <p>変数$listには上記のファイル内容が入ります。</p> <p> </p> <p> </p> <p><span style="text-decoration: underline;">2. splitメソッドで区切る</span></p> <p>タブ区切りのため、`tを使用します。`はバッククォートです。 <a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%B5%B5%AC%C9%BD%B8%BD">正規表現</a>になります。</p> <p>区切ったテキストは変数$splitへ代入します。</p> <p>変数$splitは一次元配列になっていますので、例えば、$split[0]は「営業部」が出力されます。</p> <p> </p> <p> </p> <p><span style="text-decoration: underline;">3. 項目ごとの変数を用意</span></p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/powershell">powershell</a>での配列の定義は、@()を使用します。 </p> <p> </p> <p> </p> <p><span style="text-decoration: underline;">4. 項目ごとの分類の繰り返し</span></p> <p>$splitに代入された一つ一つの値を分類するため、$splitの長さだけ処理を繰り返します。</p> <p>タブ区切りのテキストは、項目数が4個で、2セットあります。</p> <p>つまり、4で割り切れる値が2つ、余り1が2つ、余り2が2つ、余り3が2つになります。</p> <p><span style="color: #454545; font-family: 'Helvetica Neue', Helvetica, Arial, 'Hiragino Kaku Gothic Pro', Meiryo, 'MS PGothic', sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: 2px; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; float: none; display: inline !important;">余剰<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B1%E9%BB%BB%BB%D2">演算子</a>%を使用し、配列の変数を分類します。</span></p> <p>cf.) 例えば、項目が5個あれば、配列の変数に余り4の値が生まれます。</p> <p> </p> <p>分類したテキストは、各項目の配列に追記します。配列は+=で追記です。</p> <p> </p> <p> </p> <p><span style="text-decoration: underline;">5. 分類した値の出力</span></p> <p>2セット分の値が各項目に代入されているので、項目の長さだけ繰り返します。</p> <p>$name.lengthは2ですので、2回繰り返されます。</p> <p>今回はWrite-Hostでコンソールへ出力しています。</p> <p>下記が表示されます。</p> <pre>Aさんは営業部で、26歳の男です。 Bさんは技術部で、32歳の女です。 </pre> <p> </p> <p>ちなみに、Write-Hostは()を使用しないと、+も標準文字として出力されてしまいます。</p> <pre>Aさん + は + 営業部 + で、 + 26歳 + の + 男 + です。 Bさん + は + 技術部 + で、 + 32歳 + の + 女 + です。 </pre> <p> </p> <p> </p> <p> </p> <p>出力の仕方により、様々な用途に使えそうです。</p> <p>コマンドを使って何かファイルを作る時に有用です。</p> <p>例えば、ショートカットとか良いです。</p> <p> </p> <script async="" src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-3087197401719727" crossorigin="anonymous"></script> <p><ins class="adsbygoogle" style="display: block;" data-ad-client="ca-pub-3087197401719727" data-ad-slot="8835819497" data-ad-format="auto" data-full-width-responsive="true"> </ins></p> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> <p> </p> <p>以上。</p> <p> </p> <p> </p> yuki_sasano 【Powershell】複数の送信先にpingで疎通確認する。 hatenablog://entry/26006613535550389 2020-03-15T12:58:34+09:00 2020-03-15T12:58:34+09:00 つまり、バラバラの宛先を確認するってこと。 はろー、yukiです。 皆さんはどうやっているのでしょうか。。。 fpingでも良いと思います。 fpingは端的に説明すると、次のようなものです。 fping will send out a ping packet and move on to the next target in a round-robin fashion. 疎通確認の宛先が単一の時、ping <host>で良いですが、宛先が複数の時、pingではそれに対応していません。 よって、fpingを使う場合があるということです。 fpingだと、fping <host1> <host2… <p>つまり、バラバラの宛先を確認するってこと。</p> <p> </p> <p>はろー、<a class="keyword" href="http://d.hatena.ne.jp/keyword/yuki">yuki</a>です。</p> <p> </p> <p>皆さんはどうやっているのでしょうか。。。</p> <p>fpingでも良いと思います。</p> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="fping man-page" src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Ffping.org%2Ffping.1.html" frameborder="0" scrolling="no"></iframe></p> <p> </p> <p>fpingは端的に説明すると、次のようなものです。</p> <blockquote> <p>fping will send out a <a class="keyword" href="http://d.hatena.ne.jp/keyword/ping">ping</a> packet and move on to the next target in a round-robin fashion.</p> </blockquote> <p> </p> <p>疎通確認の宛先が単一の時、<code>ping &lt;host&gt;</code>で良いですが、宛先が複数の時、<a class="keyword" href="http://d.hatena.ne.jp/keyword/ping">ping</a>ではそれに対応していません。</p> <p>よって、fpingを使う場合があるということです。</p> <p>fpingだと、<code>fping &lt;host1&gt; &lt;host2&gt;</code>といった感じ。</p> <p> </p> <p>ですが、このツールは<a class="keyword" href="http://d.hatena.ne.jp/keyword/Unix%B7%CFOS">Unix系OS</a>向きのツールです。</p> <p>それに、使うとなれば、インストールする必要があります。</p> <p> </p> <p>そこで、今回は<a class="keyword" href="http://d.hatena.ne.jp/keyword/Powershell">Powershell</a>でそのツールを作ります。</p> <p>ーーーーーーーーーー</p> <ol> <li>複数の宛先を指定する。</li> <li>パケットの送信回数も指定する。</li> <li>実行する。</li> </ol> <p>ーーーーーーーーーー</p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Powershell">Powershell</a>での<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>実行は<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%BB%A5%AD%A5%E5%A5%EA%A5%C6%A5%A3%A5%DD%A5%EA%A5%B7%A1%BC">セキュリティポリシー</a>を変更する必要があります。</p> <p>今回は<code>Unrestricted</code>にします。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Powershell">Powershell</a>を開いた後、下記を実行します。</p> <p><span style="font-size: 80%;">※最初から管理者権限で<a class="keyword" href="http://d.hatena.ne.jp/keyword/Powershell">Powershell</a>を開けば、<code>start</code>のコマンドは不要</span></p> <pre>start -Verb runas <a class="keyword" href="http://d.hatena.ne.jp/keyword/powershell">powershell</a> Set-ExecutionPolicy -ExecutionPolicy Unrestricted </pre> <p> </p> <p>参考までに、ここにも記事があります。</p> <p><iframe class="embed-card embed-blogcard" style="display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;" title="スクリプト作成(switch文)、ポリシー変更、スクリプト実行(PowerShell) - 雪ん子パースペクティヴ" src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fsnowworldsnow.hatenablog.jp%2Fentry%2F%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%2597%25E3%2583%2588%25E4%25BD%259C%25E6%2588%2590%25EF%25BC%2588switch%25E6%2596%2587%25EF%25BC%2589%25E3%2580%2581%25E3%2583%259D%25E3%2583%25AA%25E3%2582%25B7%25E3%2583%25BC%25E5%25A4%2589%25E6%259B%25B4%25E3%2580%2581%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%2597" frameborder="0" scrolling="no"></iframe></p> <p> </p> <script async="" src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <p><ins class="adsbygoogle" style="display: block;" data-ad-client="ca-pub-3087197401719727" data-ad-slot="8835819497" data-ad-format="auto" data-full-width-responsive="true"> </ins></p> <script>// <![CDATA[ (adsbygoogle = window.adsbygoogle || []).push({}); // ]]></script> <p> </p> <p>コードは下記になります。</p> <pre>$hosts = "8.8.8.8", "8.8.4.4" $count = 3 for($i = 0; $i -lt ($hosts.Length); $i++) <a class="keyword" href="http://d.hatena.ne.jp/keyword/ping">ping</a> -n $count $hosts[$i] } </pre> <p> </p> <p>$hostsでは、宛先を設定します。今回は<a class="keyword" href="http://d.hatena.ne.jp/keyword/Google">Google</a>の<a class="keyword" href="http://d.hatena.ne.jp/keyword/DNS">DNS</a>を宛先にしています。</p> <p>$countで送信回数を設定します。今回は3回になります。</p> <p>for文が、<a class="keyword" href="http://d.hatena.ne.jp/keyword/ping">ping</a>で複数の宛先に疎通確認をする内容になります。</p> <p> </p> <p> </p> <p>結局は<a class="keyword" href="http://d.hatena.ne.jp/keyword/ping">ping</a>で事足りるということです。 </p> <p> </p> <p> </p> <p>以上。</p> <p> </p> <p> </p> yuki_sasano 【Terraform】Windows10にインストールし、AWSのEC2を構築する。 hatenablog://entry/26006613517683714 2020-02-22T21:07:33+09:00 2020-02-24T12:08:03+09:00 コンソールで構築するのも良いんだけど、クリックするの疲れるよね。 はろー、yukiです。 今回は、インフラ構築を自動化するオープンソースのツールTerraformを使い、AWSのEC2を構築します。 まずは、Terraformを使えるようにします。 下のリンク先にアクセスし、OSに従ってパッケージをダウンロードします。 パッケージを解凍後、システムパスを含むディレクトリに移動します。 システムパスについては下記を参照。 僕の場合、Windows10ですので、同じ方は参考にしてください。 ーーーーーーーーーーーーーーーーーーーー 1. パッケージのダウンロード ダウンロードし、解凍したTerra… <p>コンソールで構築するのも良いんだけど、クリックするの疲れるよね。</p> <p> </p> <p>はろー、<a class="keyword" href="http://d.hatena.ne.jp/keyword/yuki">yuki</a>です。</p> <p> </p> <p>今回は、インフラ構築を自動化する<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AA%A1%BC%A5%D7%A5%F3%A5%BD%A1%BC%A5%B9">オープンソース</a>のツール<a href="https://www.terraform.io" target="_blank">Terraform</a>を使い、<a class="keyword" href="http://d.hatena.ne.jp/keyword/AWS">AWS</a>のEC2を構築します。 </p> <p> </p> <p>まずは、Terraformを使えるようにします。 </p> <p>下のリンク先にアクセスし、OSに従ってパッケージをダウンロードします。</p> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="Download Terraform - Terraform by HashiCorp" src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fwww.terraform.io%2Fdownloads.html" frameborder="0" scrolling="no"></iframe></p> <p> </p> <p>パッケージを解凍後、システムパスを含む<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リに移動します。</p> <p>システムパスについては下記を参照。</p> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="What are PATH and other environment variables, and how can I set or use them?" src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fsuperuser.com%2Fquestions%2F284342%2Fwhat-are-path-and-other-environment-variables-and-how-can-i-set-or-use-them" frameborder="0" scrolling="no"></iframe></p> <p> </p> <p> </p> <p>僕の場合、Windows10ですので、同じ方は参考にしてください。</p> <p>ーーーーーーーーーーーーーーーーーーーー</p> <p><span style="font-size: 150%;">1. パッケージのダウンロード</span></p> <p>ダウンロードし、解凍したTerraformをCドライブの直下に配置します。</p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/y/yuki_sasano/20200222/20200222184258.png" alt="f:id:yuki_sasano:20200222184258p:plain" title="f:id:yuki_sasano:20200222184258p:plain" class="hatena-fotolife" itemprop="image" /></p> <p> </p> <p><span style="font-size: 150%;">2. <a class="keyword" href="http://d.hatena.ne.jp/keyword/%B4%C4%B6%AD%CA%D1%BF%F4">環境変数</a>の設定</span></p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%AF%A5%B9%A5%D7%A5%ED%A1%BC%A5%E9">エクスプローラ</a>ーを開き、アドレスバーに下記を入力します。</p> <pre>コン<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C8%A5%ED%A1%BC%A5%EB">トロール</a> パネル\システムとセキュリティ\システム</pre> <p> </p> <p>左にある[システムの詳細設定]をクリックします。</p> <p>「システムのプロパティ」が開き、[<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B4%C4%B6%AD%CA%D1%BF%F4">環境変数</a>]をクリックします。</p> <p>「<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B4%C4%B6%AD%CA%D1%BF%F4">環境変数</a>」の[システム<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B4%C4%B6%AD%CA%D1%BF%F4">環境変数</a>]にあるPathをダブルクリックします。</p> <p>「<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B4%C4%B6%AD%CA%D1%BF%F4">環境変数</a>名の編集」が開き、[新規]をクリックします。</p> <p>Terrafromを配置したアドレスをコピーし、張り付けます(下記は例)。</p> <pre>C:\terraform\</pre> <p> </p> <p><span style="font-size: 150%;">3. 実行確認</span></p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%DE%A5%F3%A5%C9%A5%D7%A5%ED%A5%F3%A5%D7%A5%C8">コマンドプロンプト</a>を開き、<code>terraform</code>と入力し、Enterを押します。</p> <p>コマンドが実行されれば、成功です。</p> <p>ーーーーーーーーーーーーーーーーーーーー</p> <p> </p> <p> </p> <script async="" src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <p><ins class="adsbygoogle" style="display: block;" data-ad-client="ca-pub-3087197401719727" data-ad-slot="8835819497" data-ad-format="auto" data-full-width-responsive="true"> </ins></p> <script>// <![CDATA[ (adsbygoogle = window.adsbygoogle || []).push({}); // ]]></script> <p> </p> <p> </p> <p>次に、<a class="keyword" href="http://d.hatena.ne.jp/keyword/AWS">AWS</a>のEC2を構築します。</p> <p>Terraformで作業を始める前に、<a class="keyword" href="http://d.hatena.ne.jp/keyword/AWS">AWS</a>の下準備をしてください。</p> <p>アカウント作成: <a href="https://aws.amazon.com/jp/" target="_blank">https://aws.amazon.com/jp/</a></p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/AWS">AWS</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/CLI">CLI</a>インストール: <a href="https://aws.amazon.com/jp/cli/" target="_blank">https://aws.amazon.com/jp/cli/</a></p> <p> ※<a href="https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-chap-configure.html#cli-quick-configuration" target="_blank">AWS CLIの設定</a></p> <p> </p> <p>Terraformでの<a class="keyword" href="http://d.hatena.ne.jp/keyword/AWS">AWS</a>操作は下の公式ドキュメントを参考にしてください。</p> <p>tfファイルに記述する各パラメータは、こちらが詳しいです。</p> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="Provider: AWS - Terraform by HashiCorp" src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fwww.terraform.io%2Fdocs%2Fproviders%2Faws%2Findex.html" frameborder="0" scrolling="no"></iframe></p> <p> </p> <p>Terraform初心者のためのガイドは下記です。こちらを参考に進めるのが良いです。</p> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="Installing Terraform | Terraform - HashiCorp Learn" src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Flearn.hashicorp.com%2Fterraform%2Fgetting-started%2Finstall" frameborder="0" scrolling="no"></iframe></p> <p> </p> <p>僕の場合は、下記になります。ご参考ください。</p> <p>ーーーーーーーーーーーーーーーーーーーー</p> <p><span style="font-size: 150%;">1. tfファイルの用意</span></p> <p>設定ファイルは<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>形式で記述します。</p> <p>ファイルの保存場所は任意ですが、Terraformがそのファイルを参照します。</p> <p>そのため、このプロジェクト用に<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リを新規に用意すると良いです。</p> <pre>provider "<a class="keyword" href="http://d.hatena.ne.jp/keyword/aws">aws</a>" { profile = "default" region = "ap-northeast-1" } resource "<a class="keyword" href="http://d.hatena.ne.jp/keyword/aws">aws</a>_instance" "example" { ami = "ami-8e4181ef" instance_type = "t1.micro" } </pre> <p><code>provider</code>ブロックで<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AF%A5%E9%A5%A6%A5%C9">クラウド</a>を指定します。</p> <p>Terraformは、ここで指定した<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AF%A5%E9%A5%A6%A5%C9">クラウド</a>の<a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a>を使用します。</p> <p><span style="font-size: 80%;"> ※providerブロックには複数のproviderを指定できます。Terraformの例ではDatadogを指定していますが、<a href="https://www.datadoghq.com/ja/" target="_blank">Datadog(監視サービス)</a>は今回使いませんので割愛します。</span></p> <p>profileは構成設定と認証情報になります。<a class="keyword" href="http://d.hatena.ne.jp/keyword/AWS">AWS</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/CLI">CLI</a>で特に指定していない場合、defaultになっています。</p> <p> cf.) <a href="https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-configure-files.html" target="_blank">設定ファイルと認証情報ファイルの設定</a></p> <p>regionは使用するリージョンを指定します(必ず指定する必要がある)。</p> <p> </p> <p><code>resource</code>ブロックでリソースを指定します。</p> <p>今回はEC2を構築しますので、<a class="keyword" href="http://d.hatena.ne.jp/keyword/aws">aws</a>_instanceを記述し、次に<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A4%A5%F3%A5%B9%A5%BF%A5%F3%A5%B9">インスタンス</a>名を決めます。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A4%A5%F3%A5%B9%A5%BF%A5%F3%A5%B9">インスタンス</a>の設定は、OSが<a class="keyword" href="http://d.hatena.ne.jp/keyword/CentOS">CentOS</a>、タイプがt1.microになります。</p> <p> </p> <p><span style="font-size: 150%;">2. 初期化 </span></p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%DE%A5%F3%A5%C9%A5%D7%A5%ED%A5%F3%A5%D7%A5%C8">コマンドプロンプト</a>で、プロジェクトの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リへ移動します。</p> <p><code>terraform init</code>を実行します。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/aws">aws</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3">プラグイン</a>がダウンロードされ、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リが作成されます。</p> <p> ※<code>terraform validate</code>を実行すると、tfファイルのチェックをしてくれます。</p> <p> </p> <p><span style="font-size: 150%;">3. 構築と結果確認</span></p> <p><code>terraform apply</code>を実行し、出力情報が表示されます。</p> <p> ※「Do you want to perform these actions?」で一時停止する</p> <p><code>yes</code>と入力すると、構築が開始されます。</p> <p>「Apply complete! Resources: 1 added, 0 changed, 0 destroyed.」が表示されると、完了です。</p> <p> </p> <p>構築された<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A4%A5%F3%A5%B9%A5%BF%A5%F3%A5%B9">インスタンス</a>の確認は、<a class="keyword" href="http://d.hatena.ne.jp/keyword/AWS">AWS</a>のコンソールからでも良いですが、<code>terraform show</code>でもできます。</p> <p>ーーーーーーーーーーーーーーーーーーーー</p> <p> </p> <p> </p> <script async="" src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <p><ins class="adsbygoogle" style="display: block;" data-ad-client="ca-pub-3087197401719727" data-ad-slot="8835819497" data-ad-format="auto" data-full-width-responsive="true"> </ins></p> <script>// <![CDATA[ (adsbygoogle = window.adsbygoogle || []).push({}); // ]]></script> <p> </p> <p> </p> <p>ここからはおまけ。</p> <p>・<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A4%A5%F3%A5%B9%A5%BF%A5%F3%A5%B9">インスタンス</a>を編集する</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A4%A5%F3%A5%B9%A5%BF%A5%F3%A5%B9">インスタンス</a>タイプを<code>t2.micro</code>にしてみましょう。</p> <pre>resource "<a class="keyword" href="http://d.hatena.ne.jp/keyword/aws">aws</a>_instance" "example" { ami = "ami-8e4181ef" instance_type = "t2.micro"</pre> <p>上記のようにthファイルを修正後、 <code>terraform apply</code>を実行します。</p> <p><code>yes</code>と入力する前に、「~ instance_type = "t1.micro" -&gt; "t2.micro"」を確認します。</p> <p>修正内容が正しいので、<code>yes</code>と入力します。</p> <p>「Apply complete! Resources: 0 added, 1 changed, 0 destroyed.」と表示されると完了です。</p> <p> </p> <p><code>terraform show</code>で確認すると、変更されていることが分かります。</p> <p> </p> <p> </p> <p>・<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A4%A5%F3%A5%B9%A5%BF%A5%F3%A5%B9">インスタンス</a>を削除する</p> <p><code>terraform destroy</code>を実行します。</p> <p>「# <a class="keyword" href="http://d.hatena.ne.jp/keyword/aws">aws</a>_instance.example will be destroyed」となり、各パラメータで「-&gt; null」と表示されています。</p> <p><code>yes</code>と入力します。</p> <p>「Destroy complete! Resources: 1 destroyed.」と表示されました。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A4%A5%F3%A5%B9%A5%BF%A5%F3%A5%B9">インスタンス</a>が削除されたため、<code>terraform show</code>を実行しても何も表示されません。</p> <p> </p> <p>なお、tfファイルは残っているので、再び構築することもできます。</p> <p>(似た構成のシステムが、手間なく構築できることになりますね)</p> <p> </p> <p> </p> <p>以上。</p> <p> </p> <p> </p> yuki_sasano 【Glide】サービス開発に必要な作業が色々と不要なので、まずは試してみた。 hatenablog://entry/26006613477421857 2019-12-07T11:40:07+09:00 2022-02-11T18:42:41+09:00 既存の技術での開発も大事だけど、流行に乗るのも大事。 はろー、yukiです。 GlideはGoogleスプレッドシートでPWAを作成できるサービスです。 ※PWAについては下記が詳しい Glideで作成したサービスはブラウザからアクセスでき、ユーザが[ホーム画面に追加]をすれば、iOSやAndroidに関係なく、アプリとしての利用も可能です。 サービス開発には、スプレッドシートにデータ構造を用意すれば良いです。 つまり、フロントサイドのコーディングは不要。 デザインも不要(ロゴの設定は可)。 バックサイドのコーディングも不要。 サーバ、ネットワークの設計も不要。 サーバサイドのコーディングも不… <p>既存の技術での開発も大事だけど、流行に乗るのも大事。</p> <p> </p> <p>はろー、<a class="keyword" href="http://d.hatena.ne.jp/keyword/yuki">yuki</a>です。</p> <p> </p> <p>Glideは<a class="keyword" href="http://d.hatena.ne.jp/keyword/Google">Google</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%D7%A5%EC%A5%C3%A5%C9%A5%B7%A1%BC%A5%C8">スプレッドシート</a>でPWAを作成できるサービスです。</p> <p>※PWAについては下記が詳しい</p> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="PWAとは(Progressive Web Appsとは) | SEO用語集:意味/解説/SEO効果など [SEO HACKS]" src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fwww.seohacks.net%2Fbasic%2Fterms%2Fpwa%2F" frameborder="0" scrolling="no"></iframe></p> <p> </p> <p>Glideで作成したサービスはブラウザからアクセスでき、ユーザが[ホーム画面に追加]をすれば、<a class="keyword" href="http://d.hatena.ne.jp/keyword/iOS">iOS</a>や<a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a>に関係なく、アプリとしての利用も可能です。</p> <p><br />サービス開発には、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%D7%A5%EC%A5%C3%A5%C9%A5%B7%A1%BC%A5%C8">スプレッドシート</a>にデータ構造を用意すれば良いです。</p> <p>つまり、フロントサイドのコーディングは不要。</p> <p>デザインも不要(ロゴの設定は可)。</p> <p>バックサイドのコーディングも不要。</p> <p>サーバ、ネットワークの設計も不要。</p> <p>サーバサイドのコーディングも不要。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C9%A5%E1%A5%A4%A5%F3">ドメイン</a>取得も不要(有料プランで<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C9%A5%E1%A5%A4%A5%F3">ドメイン</a>設定は可)。</p> <p>サービスを開始するまでに色々と不要です。何よりノンプログラミングという点が大きな特徴。</p> <p>※バックサイドとサーバサイドの違い</p> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="バックエンドとサーバーサイドの違い - Qiita" src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fqiita.com%2Fnew_engineer%2Fitems%2F1b4b84745bd7009a016d" frameborder="0" scrolling="no"></iframe></p> <p> </p> <p>セルにデータを入力すれば良いので、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a>の使用経験がある人なら誰でも作成できます。</p> <p>ただし、よりスムーズなサービス開発を考えた時、コーディングができるとやはり良いです。</p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Google">Google</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%D7%A5%EC%A5%C3%A5%C9%A5%B7%A1%BC%A5%C8">スプレッドシート</a>では、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Google%20Apps">Google Apps</a> Scriptを使用します。</p> <p>Glideの機能開発ではなく、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%D7%A5%EC%A5%C3%A5%C9%A5%B7%A1%BC%A5%C8">スプレッドシート</a>でのデータ処理に必要です。</p> <p>例えば、外部からのデータ取得やデータを整理する時、その作業はプログラムにさせた方が楽です。</p> <p>こういった自動化を考えた時、やはり厳密にはノンプログラミングでは済まないと言えます。</p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Google%20Apps">Google Apps</a> Scriptは<a class="keyword" href="http://d.hatena.ne.jp/keyword/JavaScript">JavaScript</a>をベースとしています。</p> <p>仕組みで言えば、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a>マクロ(と<a class="keyword" href="http://d.hatena.ne.jp/keyword/VBA">VBA</a>の関係)のようなものです。</p> <p>その二つの課題を解決できれば、Glideでのサービス開発はより良いものになると言えます。</p> <p>でも、リレーション(<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%D7%A5%EC%A5%C3%A5%C9%A5%B7%A1%BC%A5%C8">スプレッドシート</a>上で別シートを参照してデータを読み込む)はちょっと考えるのが必要です。</p> <p> </p> <p> </p> <p>ちなみに、僕が作成したサービスは下記になります。</p> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="岐阜市保育園空き情報" src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fgifushi-hoikuen-aki.glideapp.io" frameborder="0" scrolling="no"></iframe></p> <p> </p> <p><br />使用した<a class="keyword" href="http://d.hatena.ne.jp/keyword/Google%20Apps">Google Apps</a> Scriptのコーディングは下記になります。ご参考ください。</p> <p><iframe class="embed-card embed-blogcard" style="display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;" title="【Google Apps Script】多次元配列を操作する。要素の値を確認し、追加するまで。 - 雪ん子パースペクティヴ" src="https://hatenablog-parts.com/embed?url=http%3A%2F%2Fsnowworldsnow.hatenablog.jp%2Fentry%2F2019%2F12%2F02%2F%25E3%2580%2590Google_Apps_Script%25E3%2580%2591%25E5%25A4%259A%25E6%25AC%25A1%25E5%2585%2583%25E9%2585%258D%25E5%2588%2597%25E3%2582%2592%25E6%2593%258D%25E4%25BD%259C%25E3%2581%2599%25E3%2582%258B%25E3%2580%2582%25E8%25A6%2581%25E7%25B4%25A0%25E3%2581%25AE%25E5%2580%25A4%25E3%2582%2592%25E7%25A2%25BA" frameborder="0" scrolling="no"></iframe></p> <p><iframe class="embed-card embed-blogcard" style="display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;" title="【Google Apps Script】PDFデータをfetchし、OCRでドキュメントファイルを作成する。 - 雪ん子パースペクティヴ" src="https://hatenablog-parts.com/embed?url=http%3A%2F%2Fsnowworldsnow.hatenablog.jp%2Fentry%2F2019%2F12%2F03%2F%25E3%2580%2590Google_Apps_Script%25E3%2580%2591PDF%25E3%2583%2587%25E3%2583%25BC%25E3%2582%25BF%25E3%2582%2592fetch%25E3%2581%2597%25E3%2580%2581OCR%25E3%2581%25A7%25E3%2583%2589%25E3%2582%25AD%25E3%2583%25A5%25E3%2583%25A1%25E3%2583%25B3%25E3%2583%2588%25E3%2583%2595%25E3%2582%25A1%25E3%2582%25A4" frameborder="0" scrolling="no"></iframe></p> <p><iframe class="embed-card embed-blogcard" style="display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;" title="【Google Apps Script】ディレクトリからファイル名を取得し、指定したファイル名の有無を確認する。 - 雪ん子パースペクティヴ" src="https://hatenablog-parts.com/embed?url=http%3A%2F%2Fsnowworldsnow.hatenablog.jp%2Fentry%2F2019%2F12%2F04%2F%25E3%2580%2590Google_Apps_Script%25E3%2580%2591%25E3%2583%2587%25E3%2582%25A3%25E3%2583%25AC%25E3%2582%25AF%25E3%2583%2588%25E3%2583%25AA%25E3%2581%258B%25E3%2582%2589%25E3%2583%2595%25E3%2582%25A1%25E3%2582%25A4%25E3%2583%25AB%25E5%2590%258D%25E3%2582%2592%25E5%258F%2596%25E5%25BE%2597%25E3%2581%2597" frameborder="0" scrolling="no"></iframe></p> <p><iframe class="embed-card embed-blogcard" style="display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;" title="【Google Apps Script】文字列と配列の要素にある空白を取り除く。 - 雪ん子パースペクティヴ" src="https://hatenablog-parts.com/embed?url=http%3A%2F%2Fsnowworldsnow.hatenablog.jp%2Fentry%2F2019%2F12%2F05%2F%25E3%2580%2590Google_Apps_Script%25E3%2580%2591%25E6%2596%2587%25E5%25AD%2597%25E5%2588%2597%25E3%2581%25A8%25E9%2585%258D%25E5%2588%2597%25E3%2581%25AE%25E8%25A6%2581%25E7%25B4%25A0%25E3%2581%25AB%25E3%2581%2582%25E3%2582%258B%25E7%25A9%25BA%25E7%2599%25BD%25E3%2582%2592%25E5%258F%2596%25E3%2582%258A" frameborder="0" scrolling="no"></iframe></p> <p><iframe class="embed-card embed-blogcard" style="display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;" title="【Google Apps Script】複数のセルの値を取得し、複数のセルに値を入力する。 - 雪ん子パースペクティヴ" src="https://hatenablog-parts.com/embed?url=http%3A%2F%2Fsnowworldsnow.hatenablog.jp%2Fentry%2F2019%2F12%2F06%2F%25E3%2580%2590Google_Apps_Script%25E3%2580%2591%25E8%25A4%2587%25E6%2595%25B0%25E3%2581%25AE%25E3%2582%25BB%25E3%2583%25AB%25E3%2581%25AE%25E5%2580%25A4%25E3%2582%2592%25E5%258F%2596%25E5%25BE%2597%25E3%2581%2597%25E3%2580%2581%25E8%25A4%2587%25E6%2595%25B0%25E3%2581%25AE%25E3%2582%25BB%25E3%2583%25AB" frameborder="0" scrolling="no"></iframe></p> <p> </p> <p> </p> <p>しっかりと設計して開発を始める前に、どれくらいのものを作るのか、イメージするには有用でした。</p> <p> </p> <p><br /><a class="keyword" href="http://d.hatena.ne.jp/keyword/%B8%F8%BC%B0Web%A5%B5%A5%A4%A5%C8">公式Webサイト</a>はこちら。</p> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="Create an App from a Google Sheet in Minutes · Glide" src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fwww.glideapps.com%2F" frameborder="0" scrolling="no"></iframe></p> <p> </p> <p> </p> <p>以上。</p> <p> </p> <p> </p> yuki_sasano 【Google Apps Script】複数のセルの値を取得し、複数のセルに値を入力する。 hatenablog://entry/26006613476940007 2019-12-06T21:29:39+09:00 2019-12-06T21:29:39+09:00 for文を使い、行列にする必要はない。 はろー、yukiです。 Excelマクロだと、VBAでfor文を使用し、複数のセルを扱っていたと思います。 Google Apps Scriptでは、すでに用意されているメソッドを使用します。 getValuesとsetValuesです。 ValuesをValueにすると、単体の取り扱いになります。 コードは下記になります。 //////////////////////////////////////////////////////// /// /// /// スプレッドシートにある複数のセルの値を取得 /// /// 配列の要素をスプレッドシートの複数… <p>for文を使い、行列にする必要はない。</p> <p> </p> <p>はろー、<a class="keyword" href="http://d.hatena.ne.jp/keyword/yuki">yuki</a>です。</p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a>マクロだと、<a class="keyword" href="http://d.hatena.ne.jp/keyword/VBA">VBA</a>でfor文を使用し、複数のセルを扱っていたと思います。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Google%20Apps">Google Apps</a> Scriptでは、すでに用意されているメソッドを使用します。</p> <p><code>getValues</code>と<code>setValues</code>です。</p> <p><code>Values</code>を<code>Value</code>にすると、単体の取り扱いになります。</p> <p> </p> <p>コードは下記になります。</p> <pre>//////////////////////////////////////////////////////// /// /// /// <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%D7%A5%EC%A5%C3%A5%C9%A5%B7%A1%BC%A5%C8">スプレッドシート</a>にある複数のセルの値を取得 /// /// 配列の要素を<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%D7%A5%EC%A5%C3%A5%C9%A5%B7%A1%BC%A5%C8">スプレッドシート</a>の複数セルに入力 /// /// /// //////////////////////////////////////////////////////// var rowStartPnt = 1; // 1:10 var colStartPnt = 1; // A:E -&gt; 1:5 var rowNum = 9; var colNum = 4; var sampleAry = ["ここにテキスト1", "ここにテキスト2"]; // 配列はサンプル function getValues() { // 在籍人数の値を取得 var getCellValues = targetSheet.getRange(rowStartPnt, colStartPnt, rowNum, colNum).getValues(); // Logger.log(getZaisekiAry); // getRangeメソッド // 戻り値はRange // <a href="https://developers.google.com/apps-script/reference/spreadsheet/sheet#getRange(Integer,Integer,Integer,Integer)">https://developers.google.com/apps-script/reference/spreadsheet/sheet#getRange(Integer,Integer,Integer,Integer)</a> // getValuesメソッド // 戻り値は二次元配列 // <a href="https://developers.google.com/apps-script/reference/spreadsheet/range#getvalues">https://developers.google.com/apps-script/reference/spreadsheet/range#getvalues</a> } function setValues() { // 在籍人数の値を格納 var setCellValues = targetSheet.getRange(rowStartPnt, colStartPnt, rowNum, colNum).setValues(sampleAry); // setValuesメソッド // 戻り値はRange // <a href="https://developers.google.com/apps-script/reference/spreadsheet/range#setvaluesvalues">https://developers.google.com/apps-script/reference/spreadsheet/range#setvaluesvalues</a> } </pre> <p> </p> <p> </p> <p>何が良いって、コードが短くなることですよね。</p> <p>for文を重ねると5-10行くらいになりそうなのが、5行未満で実現できる。</p> <p> </p> <p>補足までに、変数を使用してセルの開始位置と、移動回数を設定しています。</p> <p>汎用性のあるコーディングになっています。</p> <p> </p> <p> </p> <p>以上。</p> <p> </p> <p> </p> yuki_sasano 【Google Apps Script】文字列と配列の要素にある空白を取り除く。 hatenablog://entry/26006613476857056 2019-12-05T20:07:21+09:00 2019-12-06T21:28:20+09:00 結局は正規表現と向き合うことになる。 はろー、yukiです。 文字列の空白処理はよくあることです。 今回は文字列のある変数と、文字列のある配列要素に対する処理です。 結局のところ、配列も変数に格納し、空白処理をしています。 それでは、コードをご参考ください。 ////////////////////////////////////////////////////////////////// /// /// /// 文字列と配列の要素にある空白を取り除き、文字列を検索 /// /// /// ////////////////////////////////////////////////////… <p>結局は<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%B5%B5%AC%C9%BD%B8%BD">正規表現</a>と向き合うことになる。</p> <p> </p> <p>はろー、<a class="keyword" href="http://d.hatena.ne.jp/keyword/yuki">yuki</a>です。</p> <p> </p> <p>文字列の空白処理はよくあることです。</p> <p>今回は文字列のある変数と、文字列のある配列要素に対する処理です。</p> <p>結局のところ、配列も変数に格納し、空白処理をしています。</p> <p> </p> <p>それでは、コードをご参考ください。</p> <pre>////////////////////////////////////////////////////////////////// /// /// /// 文字列と配列の要素にある空白を取り除き、文字列を検索 /// /// /// ////////////////////////////////////////////////////////////////// var textStr = "ここ' 'に' 'テキスト"; var targetAry = ["ここ' 'に' 'テキスト"]; var searchStr = "テキスト"; // 文字列のスペースを削除 function replaceStr() { textStr = textStr.replace(/\s+/g, ""); Logger.log(textStr); // replaceメソッド // ※<a class="keyword" href="http://d.hatena.ne.jp/keyword/JavaScript">JavaScript</a>を参照 // <a href="https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/replace">https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/replace</a> // <a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%B5%B5%AC%C9%BD%B8%BD">正規表現</a> // 最初と最後の/: <a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%B5%B5%AC%C9%BD%B8%BD">正規表現</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EA%A5%C6%A5%E9%A5%EB">リテラル</a> // \s: 垂直タブ以外のすべての空白文字 // +: 1回以上の繰り返し // g: グローバルマッチのフラグ(グローバルな検索と置換) // <a href="https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Regular_Expressions">https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Regular_Expressions</a> // <a href="https://murashun.jp/blog/20190215-01.html">https://murashun.jp/blog/20190215-01.html</a> // 文字列を検索 if(textStr.match(searchStr)){ Logger.log(textStr.match(searchStr)); } // matchメソッド // 戻り値はオブジェクト // <a href="https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/match">https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/match</a> } // 配列の要素のスペースを削除 function replaceAry() { // 配列の長さ(要素)の数で繰り返し for(var i = 0; i &lt;= targetAry.length; i++){ var textAryStr = targetAry[i]; if(textAryStr){ textAryStr = textAryStr.replace(/\s+/g, ""); Logger.log(textAryStr); // // 文字列を検索をする場合、replaceStr関数と同じ // } } } </pre> <p> </p> <p> </p> <p>自分でコーディングしておいてなんですが、よく分からない点が一つ。</p> <p>配列での空白削除の処理で、なぜ一度<code>if(textAryStr)</code>をしなければいけないのか。</p> <p><code>targetAry[i]</code>に<code>replace</code>メソッドをが通らず、苦肉の策で<code>if</code>文を用意したらうまくいきました。</p> <p><code>replace</code>メソッドはGASの<code>Text</code>クラスに使用するものだから...か?</p> <p> </p> <p>何か知見のある方、コメント頂けると助かります。</p> <p> </p> <p> </p> <p>以上。 </p> <p> </p> <p> </p> yuki_sasano 【Google Apps Script】ディレクトリからファイル名を取得し、指定したファイル名の有無を確認する。 hatenablog://entry/26006613476280000 2019-12-04T20:55:02+09:00 2019-12-04T20:55:02+09:00 こういった事務的な処理は基本だけど、大事。 はろー、yukiです。 ファイル名有無の確認は、すなわちファイル有無の確認。 環境がローカルPCでもクラウドでも、サーバでもやることは同じです。 確認を実行する言語が変わっても、処理は大差ありません。 (言語によりコーディングの長短はあると思います) 今回は、Google Drive内で実施するので、Google Apps Scriptを使用しました。 コードは下記になります。 //////////////////////////////////////////////////////////////////////////////// /// //… <p>こういった事務的な処理は基本だけど、大事。</p> <p> </p> <p>はろー、<a class="keyword" href="http://d.hatena.ne.jp/keyword/yuki">yuki</a>です。</p> <p> </p> <p>ファイル名有無の確認は、すなわちファイル有無の確認。</p> <p>環境がローカルPCでも<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AF%A5%E9%A5%A6%A5%C9">クラウド</a>でも、サーバでもやることは同じです。</p> <p>確認を実行する言語が変わっても、処理は大差ありません。</p> <p>(言語によりコーディングの長短はあると思います)</p> <p> </p> <p>今回は、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Google%20Drive">Google Drive</a>内で実施するので、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Google%20Apps">Google Apps</a> Scriptを使用しました。</p> <p> </p> <p>コードは下記になります。</p> <pre>//////////////////////////////////////////////////////////////////////////////// /// /// /// <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リからファイル名を取得し、指定したファイル名の有無を確認 /// /// /// //////////////////////////////////////////////////////////////////////////////// var fileDir = "ここに<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リのID"; var fileName = "ここにファイル名"; function searchFile() { // 既存ファイルの確認 var oldFiles = DriveApp.getFolderById(fileDir).getFiles(); var oldFileAry = []; var countOldFileAry = 0; // 変数oldFileAryの配列キーに使用 var countMakeFile = 0; // ファイル名が一致する場合に回数をカウント // getFilesメソッド // 戻り値は<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A4%A5%C6%A5%EC%A1%BC%A5%BF">イテレータ</a>(Drive内の全てのファイルのコレクション) // <a href="https://developers.google.com/apps-script/reference/drive/drive-app#getfiles">https://developers.google.com/apps-script/reference/drive/drive-app#getfiles</a> // <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A4%A5%C6%A5%EC%A1%BC%A5%BF">イテレータ</a>の詳細は下記URL // <a href="https://qiita.com/kura07/items/cf168a7ea20e8c2554c6">https://qiita.com/kura07/items/cf168a7ea20e8c2554c6</a> while(oldFiles.hasNext()){ oldFileAry[countOldFileAry] = oldFiles.next().getName(); countOldFileAry++; } // hasNextメソッド ※変数oldFilesは<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A4%A5%C6%A5%EC%A1%BC%A5%BF">イテレータ</a>のため // 戻り値はBoolean型 // <a href="https://developers.google.com/apps-script/reference/drive/file-iterator">https://developers.google.com/apps-script/reference/drive/file-iterator</a> // nextメソッド // 戻り値はオブジェクト(ファイル) // <a href="https://developers.google.com/apps-script/reference/drive/file-iterator#next">https://developers.google.com/apps-script/reference/drive/file-iterator#next</a> // getNameメソッド // 戻り値はファイル名 // <a href="https://developers.google.com/apps-script/reference/drive/file#getname">https://developers.google.com/apps-script/reference/drive/file#getname</a> // 指定したファイル名と同じファイル名の有無を確認 for(var i = 0; i &lt; oldFileAry.length; i++){ if(fileName == oldFileAry[i]){ countMakeFile++; }else{ // 指定したファイル名は存在しない // Logger.log("Not same, oldFile : %s, fileName : %s", oldFileAry[i], fileName); } } // 指定したファイル名がない場合、該当ファイルを作成 // ※countMakeFileが0の時、同じファイル名がない if(countMakeFile == 0){ // ここに処理を記述 // // ファイル出力 // var <a class="keyword" href="http://d.hatena.ne.jp/keyword/makeFile">makeFile</a> = Drive.Files.insert(fileName, fileDir); // }else{ // ountMakeFileが1の時、同じファイル名がすでにある // Logger.log("countMakeFile : %s", countMakeFile); } } </pre> <p> </p> <p> </p> <p>指定したファイル名がない時の処理は、その他にも色々とあると思います。</p> <p>ファイル名を<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%D7%A5%EC%A5%C3%A5%C9%A5%B7%A1%BC%A5%C8">スプレッドシート</a>のセルに入力するとか。単にログ出力するとか。</p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/VBA">VBA</a>では<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A4%A5%C6%A5%EC%A1%BC%A5%BF">イテレータ</a>は扱わないので、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a>マクロを使う方にとっては新鮮かも。</p> <p>僕が<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A4%A5%C6%A5%EC%A1%BC%A5%BF">イテレータ</a>を初めて見たのは、<a class="keyword" href="http://d.hatena.ne.jp/keyword/python">python</a>を勉強を始めた6年くらい前のことで、調べて思い出したくらいです。</p> <p><code>next()</code>メソッドを使うあたり、繰り返し処理に適した配列と言えそうです。</p> <p> </p> <p>ちなみに、有無を確認し、何かを実行する処理は、もっと短くできないものでしょうか。</p> <p>(なんか、いつも回数カウントを用意している気がする。。。)</p> <p> </p> <p> </p> <p>以上。</p> <p> </p> <p> </p> yuki_sasano 【Google Apps Script】PDFデータをfetchし、OCRでドキュメントファイルを作成する。 hatenablog://entry/26006613475771729 2019-12-03T22:46:57+09:00 2019-12-03T22:46:57+09:00 買い物のレシートとか、ビジネス文書とかの読み取りは、簡単に言うとコレ。 はろー、yukiです。 OCR(Optical Character Recognition)とは、光学文字認識のことです。 なんて書くと、難しく感じますが、最近だと使うのも簡単になっています。 OCRは、テキストでない情報をテキスト化することができる技術です。 テキストはtxt形式やdoc形式などで使用しますが、画像にある文字はテキストではなく、文字に見える画像です。 その文字に見えるものを、実際に文字(テキスト)にする技術がOCRと呼ばれるものです。 今回は、Google DriveのAPIにあるOCRを使用しました。 … <p>買い物のレシートとか、ビジネス文書とかの読み取りは、簡単に言うとコレ。</p> <p> </p> <p>はろー、<a class="keyword" href="http://d.hatena.ne.jp/keyword/yuki">yuki</a>です。</p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/OCR">OCR</a>(Optical Character Recognition)とは、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B8%F7%B3%D8%CA%B8%BB%FA%C7%A7%BC%B1">光学文字認識</a>のことです。</p> <p>なんて書くと、難しく感じますが、最近だと使うのも簡単になっています。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/OCR">OCR</a>は、テキストでない情報をテキスト化することができる技術です。</p> <p>テキストはtxt形式やdoc形式などで使用しますが、画像にある文字はテキストではなく、文字に見える画像です。</p> <p>その文字に見えるものを、実際に文字(テキスト)にする技術が<a class="keyword" href="http://d.hatena.ne.jp/keyword/OCR">OCR</a>と呼ばれるものです。</p> <p> </p> <p>今回は、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Google%20Drive">Google Drive</a>の<a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a>にある<a class="keyword" href="http://d.hatena.ne.jp/keyword/OCR">OCR</a>を使用しました。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Google%20Apps">Google Apps</a> ScriptだとDrive <a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a>も簡単に利用できます。</p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/OCR">OCR</a>をするファイルは画像もできますが、今回はPDFを指定しています。</p> <p>下記のコードを参考ください。</p> <p>※ファイル作成部分(名前、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リ)を設定できるようにしています。</p> <pre>/////////////////////////////////////////////////////////// ///                                                     /// ///   対象のPDFファイルをfetchし、<a class="keyword" href="http://d.hatena.ne.jp/keyword/OCR">OCR</a>でファイルを作成   /// ///                                                     /// /////////////////////////////////////////////////////////// // 作成するファイルの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リ、名前を設定 // ※ファイル名には作成時の年月を付す var currentDay = Utilities.formatDate(new Date(), "<a class="keyword" href="http://d.hatena.ne.jp/keyword/JST">JST</a>", "yyMM"); // 2019年12月の場合 -&gt; 1912 var fileDir = "ここに<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リのID"; var fileName = "ここにファイル名" + currentDay; // -&gt; ファイル名1912 function makeFileByOCR() {   // 作成するファイルを設定   var resource = {     title: fileName,     parents: [{"id": fileDir}],     mimeType: 'application/pdf'   };   // mimeType(<a class="keyword" href="http://d.hatena.ne.jp/keyword/MIME">MIME</a>:メディアタイプ)は下記URLが詳しい   // <a href="https://developer.mozilla.org/ja/docs/Web/HTTP/Basics_of_HTTP/MIME_types">https://developer.mozilla.org/ja/docs/Web/HTTP/Basics_of_HTTP/MIME_types</a>   // 対象のファイルを取得   // ※fetchするデータをBLOB型に置き換える   var response = UrlFetchApp.fetch('対象のPDFファイルのあるURL');   var mediaData = response.getBlob();   // getBlobメソッド   // <a href="https://developers.google.com/apps-script/reference/drive/file#getblob">https://developers.google.com/apps-script/reference/drive/file#getblob</a>   // BLOB型は下記URLが詳しい   // <a href="https://ja.javascript.info/blob">https://ja.javascript.info/blob</a>   // <a class="keyword" href="http://d.hatena.ne.jp/keyword/OCR">OCR</a>を設定   var options = {     <a class="keyword" href="http://d.hatena.ne.jp/keyword/ocr">ocr</a>: true,     ocrLanguage: 'ja'   };   // ファイル作成   var <a class="keyword" href="http://d.hatena.ne.jp/keyword/makeFile">makeFile</a> = Drive.Files.insert(resource, mediaData, options);   // Drive <a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a>のFiles.insertメソッド   // Files.insert(各パラメータ);   // <a href="https://developers.google.com/drive/api/v2/reference/files/insert">https://developers.google.com/drive/api/v2/reference/files/insert</a>   // Drive <a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a>の使用例 ※[Uploading files]を参照   // <a href="https://developers.google.com/apps-script/advanced/drive">https://developers.google.com/apps-script/advanced/drive</a> } </pre> <p> </p> <p><code>mimeType</code>を他のメディア形式(拡張子)に変え、URLを指定すると、色々と<a class="keyword" href="http://d.hatena.ne.jp/keyword/OCR">OCR</a>ができるはずです。 </p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/OCR">OCR</a>専用の<a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a>というよりは、 Drive <a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a>にある<code>File.insert</code>メソッドの一機能(パラメータ)ですね。</p> <p> </p> <p> </p> <p>以上。</p> <p> </p> <p> </p> yuki_sasano 【Google Apps Script】多次元配列を操作する。要素の値を確認し、追加するまで。 hatenablog://entry/26006613475237670 2019-12-02T22:56:58+09:00 2019-12-02T22:56:58+09:00 1次元配列はOK。2次元もOK。3次元...? はろー、yukiです。 Google Apps Script(以降、GASと略す)で配列を操作する機会がありました。 使ったとしても2次元配列までとは思います。 でも、例えば、2次元配列の要素に配列を加えた時、3次元配列が作成されます。 そういった複雑なことは決して起こらないとは限らないので、3次元配列までの値の出力、追加をまとめました。 内容を整理したコードは下記になります。 //////////////////////////// /// /// /// 多次元配列の操作 /// /// /// ///////////////////////… <p>1次元配列はOK。2次元もOK。3次元...?</p> <p> </p> <p>はろー、<a class="keyword" href="http://d.hatena.ne.jp/keyword/yuki">yuki</a>です。</p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Google%20Apps">Google Apps</a> Script(以降、GASと略す)で配列を操作する機会がありました。</p> <p>使ったとしても2次元配列までとは思います。</p> <p>でも、例えば、2次元配列の要素に配列を加えた時、3次元配列が作成されます。</p> <p>そういった複雑なことは決して起こらないとは限らないので、3次元配列までの値の出力、追加をまとめました。</p> <p> </p> <p>内容を整理したコードは下記になります。</p> <pre> //////////////////////////// ///                      /// ///   多次元配列の操作   /// ///                      /// //////////////////////////// // 対象となる配列 // testAry = [[], [], [[],[]]]; // ex.) testAry = [[i], [j], [[k], [l]]]; // i -&gt; Name: "a", "b", "c", "d",... // j -&gt; Label: "front", "back" // k -&gt; Num: 1, 2, 3, 4,... // l -&gt; Num: 9, 8, 7, 6,... // テストデータ   var testAry = [["a", "b", "c", "d"], ["front", "back"], [[1, 2, 3, 4],[9, 8, 7, 6]]]; // 値の出力を確認 function checkValue() {   Logger.log("** 1次元 **");   Logger.log(testAry[0]); // -&gt; "a", "b", "c", "d"   Logger.log("** 2次元 **");   Logger.log(testAry[0][0]); // -&gt; "a"   Logger.log(testAry[1][0]); // -&gt; "front"   Logger.log(testAry[2][0]); // -&gt; 1, 2, 3, 4     Logger.log("** 3次元 **");   Logger.log(testAry[2][0][0]); // -&gt; 1   Logger.log(testAry[2][1][0]); // -&gt; 9 } // 値の追加を確認 function addValue() {   // 末尾に"e"を追加   testAry[0][4] = "e";   Logger.log(testAry[0][4]);   // spliceメソッドを使用し、中間に"middle"を追加 //  testAry[1][1] = "middle"; // -&gt; "back"が上書きされる   testAry[1].splice(1, 0, "middle");   Logger.log(testAry[1]); // -&gt; "front", "middle", "back"   Logger.log(testAry[1][1]); // -&gt; "middle"   // spliceメソッドを使用し、先頭に"0"を追加   testAry[2][0].splice(0, 0, 0);   Logger.log(testAry[2][0]); // -&gt; 0,1,2,3,4   Logger.log(testAry[2][0][0]); // -&gt;0   // [<a class="keyword" href="http://d.hatena.ne.jp/keyword/JavaScript">JavaScript</a>]   // array.slice(開始位置, 取り除く要素, 追加する要素)   // ※取り除く要素が0の時は、どの要素も取り除かれない。   // <a href="https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/splice">https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/splice</a>   // pushメソッドを使用し、末尾に"5"を追加   testAry[2][1].push(5);   Logger.log(testAry[2][1]); // -&gt; 9,8,7,6,5   Logger.log(testAry[2][1][4]); // -&gt;5   // [<a class="keyword" href="http://d.hatena.ne.jp/keyword/JavaScript">JavaScript</a>]   // array.push(配列の末尾に追加する要素)   // <a href="https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/push">https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/push</a> } </pre> <p> </p> <p> </p> <p>上記のサンプルコードを使い、理解が定着するまで、配列の順番[#]を入れ替えて試してみてください。</p> <p> </p> <p>GASは<a class="keyword" href="http://d.hatena.ne.jp/keyword/JavaScript">JavaScript</a>がもとになっています。各メソッドの詳細はリンク先を読んでみてください。</p> <p> </p> <p> </p> <p>以上。</p> <p> </p> <p> </p> yuki_sasano 【VBA】フォルダにあるファイル名を取得し、Excelのファイル名リストと照合を取る。 hatenablog://entry/26006613428807753 2019-09-14T14:39:26+09:00 2019-09-14T14:39:26+09:00 vbaだからこんなに苦労したと思う。 はろー、yukiです。 今回のマクロは、例えば提出物の確認を取る時などに有効です。 特定のフォルダに提出物が出され、提出したファイルをExcelにリストで集計する時など。 フォルダにあるファイル名と、Excelにあるファイル名の整合性を取る必要があります。 フォルダにはあるがExcelには記載されていなかったり、Excelに記載したのに実際のファイルはなかったり、、。 そんな状況を避けるために使用するマクロになります。 手順は多いですが、下記のような感じになります。 ※ここから「フォルダ」を「ディレクトリ」に言い換えます。その方が書きやすいので。 ーーーー… <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/vba">vba</a>だからこんなに苦労したと思う。</p> <p> </p> <p>はろー、<a class="keyword" href="http://d.hatena.ne.jp/keyword/yuki">yuki</a>です。</p> <p> </p> <p>今回のマクロは、例えば提出物の確認を取る時などに有効です。</p> <p>特定のフォルダに提出物が出され、提出したファイルを<a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a>にリストで集計する時など。</p> <p>フォルダにあるファイル名と、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a>にあるファイル名の整合性を取る必要があります。</p> <p>フォルダにはあるが<a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a>には記載されていなかったり、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a>に記載したのに実際のファイルはなかったり、、。</p> <p> </p> <p>そんな状況を避けるために使用するマクロになります。</p> <p>手順は多いですが、下記のような感じになります。</p> <p>※ここから「フォルダ」を「<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リ」に言い換えます。その方が書きやすいので。</p> <p> </p> <p>ーーーーーーーーーーーーーー</p> <ol> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リにあるファイル名を収集</li> <li>収集したファイル名を一つずつ、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a>にあるファイル名リストと照合</li> <li>照合した結果、どちらもあるものを「OK」とする</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a>にしかないものを「ファイルなし」とする</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リにしかない場合、そのファイル名を別の列に入力</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a>のファイル名リストに空行がある場合、「リストが空セル」とする</li> </ol> <p>※処理の開始前に、実行選択を問う</p> <p>※処理が終了後、完了のメッセージを表示する</p> <p>ーーーーーーーーーーーーーー</p> <p> </p> <p>まずは、実行の流れを画像でみましょう。</p> <p>マクロと対象のfile<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リをenv<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リ内に用意します。</p> <p><img class="hatena-fotolife" title="f:id:yuki_sasano:20190914141715p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/y/yuki_sasano/20190914/20190914141715.png" alt="f:id:yuki_sasano:20190914141715p:plain" /></p> <p> </p> <p>file<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リ内には下記のようなファイルがあると想定します。</p> <p>※[123456789.txt]は<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リのみにあるファイル</p> <p><img class="hatena-fotolife" title="f:id:yuki_sasano:20190914141738p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/y/yuki_sasano/20190914/20190914141738.png" alt="f:id:yuki_sasano:20190914141738p:plain" /></p> <p> </p> <p>マクロのある<a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a>には、下記のようなリストが用意されています。</p> <p>※[987654321.txt]は<a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a>のみにあるファイル</p> <p><img class="hatena-fotolife" title="f:id:yuki_sasano:20190914142729p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/y/yuki_sasano/20190914/20190914142729.png" alt="f:id:yuki_sasano:20190914142729p:plain" /></p> <p> </p> <p>マクロの開始ボタンを押下し、処理を開始します。</p> <p><img class="hatena-fotolife" title="f:id:yuki_sasano:20190914142834p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/y/yuki_sasano/20190914/20190914142834.png" alt="f:id:yuki_sasano:20190914142834p:plain" /></p> <p> </p> <p>処理が完了すると、メッセージが表示されます。</p> <p><img class="hatena-fotolife" title="f:id:yuki_sasano:20190914142843p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/y/yuki_sasano/20190914/20190914142843.png" alt="f:id:yuki_sasano:20190914142843p:plain" /></p> <p> </p> <p>結果は下記のようになります。</p> <p><img class="hatena-fotolife" title="f:id:yuki_sasano:20190914142858p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/y/yuki_sasano/20190914/20190914142858.png" alt="f:id:yuki_sasano:20190914142858p:plain" /></p> <p> </p> <p>実行の結果、「OK、空セル、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a>のみ、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リのみ」の4種類を判別しています。</p> <p> </p> <p> </p> <p>コードは下記になります。</p> <p>時間のない方は、env<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リを作成し、このマクロとfile<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リを作成してください。</p> <p>確認する対象のファイルはfile<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リに入れてください。</p> <p> </p> <pre>Sub fileConfirm() ' <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リにあるファイルと<a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a>にあるファイルの照合を取る<br /> Dim startProcess, endProcess Dim s_message, s_type, s_title Dim e_message, e_type, e_title Dim listInDir, listInElx, listOnlyDir Dim item() Dim forNumFiles Dim numFiles Dim endList, endChk, endOnlyDir Dim numNG, numValue Dim chkOnlyDir, chkOnlyElx Dim i, j, n, m ' for statement ' 処理の開始前にメッセージを表示 s_message = "リストにあるファイルとフォルダにあるファイルの照合確認をしますか?" s_type = vbOKCancel s_title = "処理の確認" startProcess = MsgBox(s_message, s_type, s_title) If (startProcess = 1) Then' 処理がOKされた場合 ' 対象の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リ(env<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リより前も絶対参照しても良い) Path = CurDir + "/env/file/." ' <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リにあるファイル数を取得 forNumFiles = Dir(Path, vbNormal) numFiles = 0 Do While Len(forNumFiles) &gt; 0 numFiles = numFiles + 1 forNumFiles = Dir() Loop ' 繰り返し処理のためデータを格納する配列の再定義 ReDim Preserve item(numFiles) ' <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リにあるファイル名を取得 listInDir = Dir(Path, vbNormal) ' <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リのファイル名を配列に格納 For i = 1 To numFiles item(i) = listInDir listInDir = Dir() Next ' <a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a>にあるファイル名リストで値のある最後のセル位置を取得 endList = Cells(Rows.Count, 2).End(xlUp).Row ' <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リあるファイル名と<a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a>にあるファイル名を比較 For Each fname In item ' 空白セルの判定 If Not (fname = "") Then numValue = 0 ' ファイル名が値としてあるセルをカウント(値がある時は1以上) numNG = 0 ' ファイル名が一致しないセル数をカウント(一致しない時は1以上) For n = 3 To endList ' セル"B3" ' <a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a>にあるファイル名リストを取得 listInElx = Cells(n, 2).<a class="keyword" href="http://d.hatena.ne.jp/keyword/Value">Value</a> ' B列 ' 空白セルの判定 If Not (listInElx = "") Then numValue = numValue + 1 ' <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リのファイル名を一つずつ<a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a>のファイル名リストと比較 If (fname = listInElx) Then Cells(n, 2).Offset(0, 1).<a class="keyword" href="http://d.hatena.ne.jp/keyword/Value">Value</a> = "OK" Else numNG = numNG + 1 ' ファイル名が一致しない場合 End If Else Cells(n, 2).Offset(0, 1).<a class="keyword" href="http://d.hatena.ne.jp/keyword/Value">Value</a> = "リストが空セル" End If Next ' <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リのみにあるファイル名の場合 If (numValue = numNG) Then endOnlyDir = Cells(Rows.Count, 4).End(xlUp).Row 'ファイル名がすでにある場合(この処理が一度されたファイル名の場合) If IsEmpty(Cells(3, 4).<a class="keyword" href="http://d.hatena.ne.jp/keyword/Value">Value</a>) Then Cells(3, 4).<a class="keyword" href="http://d.hatena.ne.jp/keyword/Value">Value</a> = fname Else For m = 3 To endOnlyDir listOnlyDir = Cells(m, 4).<a class="keyword" href="http://d.hatena.ne.jp/keyword/Value">Value</a> ' D列 If (fname = listOnlyDir) Then chkOnlyDir = chkOnlyDir + 1 End If Next End If <br />        '<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リのみにあるファイル名を最初に入力する場合 If (chkOnlyDir = 0) Then Cells(endOnlyDir + 1, 4).<a class="keyword" href="http://d.hatena.ne.jp/keyword/Value">Value</a> = fname End If End If End If Next ' <a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a>のみにあるファイル名の場合 endChk = Cells(Rows.Count, 3).End(xlUp).Row For j = 3 To endChk chkOnlyElx = Cells(j, 3).<a class="keyword" href="http://d.hatena.ne.jp/keyword/Value">Value</a> ' C列 If IsEmpty(chkOnlyElx) Then Cells(j, 3).<a class="keyword" href="http://d.hatena.ne.jp/keyword/Value">Value</a> = "ファイルなし" End If Next ' 処理の終了後にメッセージを表示 e_message = "全てのファイルの確認が終わりました。" e_type = vbOKOnly e_title = "確認メッセージ" MsgBox e_message, e_type, e_title Else '処理がキャンセルされた場合 MsgBox ("ファイルの照合確認を中止します。") End If End Sub</pre> <p> </p> <p><br />それでは、順番にみていきましょう。</p> <p> </p> <p><span style="text-decoration: underline; font-size: 150%;">1. 変数の定義</span></p> <p>下記のコメントを参考にしてください。</p> <pre>Dim startProcess, endProcess ' 処理の開始前/終了後にメッセージを表示 Dim s_message, s_type, s_title ' 開始前メッセージボックスの値 Dim e_message, e_type, e_title ' 終了後メッセージボックスの値 Dim listInDir, listInElx, listOnlyDir ' 各リストのファイル名を格納 Dim item() ' <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リにあるファイル名を配列で格納 Dim forNumFiles ' <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リにあるファイル数取得用の繰り返し処理で使用 Dim numFiles ' <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リにあるファイル数を格納 Dim endList, endChk, endOnlyDir ' <a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a>で値のある最後のセル位置を取得 Dim numNG, numValue ' <a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a>のみに記載されているファイル名取得 Dim chkOnlyDir, chkOnlyElx ' <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リのみに記載されているファイル名取得 Dim i, j, n, m ' for文で使用 </pre> <p> </p> <p> </p> <p><span style="text-decoration: underline; font-size: 150%;">2. 処理前の確認</span></p> <pre>s_message = "リストにあるファイルとフォルダにあるファイルの照合確認をしますか?" s_type = vbOKCancel s_title = "処理の確認" startProcess = MsgBox(s_message, s_type, s_title) If (startProcess = 1) Then ' ' この中に処理を記述 ' Else MsgBox ("ファイルの照合確認を中止します。") End If </pre> <p>ユーザが処理を実行する前に、メッセージボックスで確認を取ります。</p> <p> </p> <p> </p> <p><span style="text-decoration: underline; font-size: 150%;">3. <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リにあるファイル名取得のため、ファイル数を取得</span></p> <pre>Path = CurDir + "/env/file/." forNumFiles = Dir(Path, vbNormal) numFiles = 0 Do While Len(forNumFiles) &gt; 0 numFiles = numFiles + 1 forNumFiles = Dir() Loop </pre> <p><code>CurDir</code>関数で、この<a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a>のある<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リ位置を取得します。</p> <p>そこに追加で、対象のファイルが格納されている<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リを指定します。</p> <p><code>Dir</code>関数で指定<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リにあるファイル名を取得します。</p> <p><code>vbNormal</code>は既定値のオプションですが、ここでは明示化しています(なくても良い)。</p> <p>変数<code>forNumFiles</code>にはファイル名が格納されているので、Stringの長さが0以上の場合、繰り返し処理をします。</p> <p>変数<code>numFiles</code>で繰り返しされた処理の合計回数、すなわちファイル数を取得します。</p> <p> </p> <p> </p> <p><span style="text-decoration: underline; font-size: 150%;">4. <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リにあるファイル名を取得</span></p> <pre>ReDim Preserve item(numFiles) listInDir = Dir(Path, vbNormal) For i = 1 To numFiles item(i) = listInDir listInDir = Dir() Next</pre> <p>ReDimにより変数<code>item</code>を、<code>Preserve</code>オプションを付して再定義します。</p> <p><code>Preserve</code>を付すことで、変数<code>item</code>は繰り返し処理時、値を保持し続けることができます。</p> <p>変数<code>listInDir</code>に<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リにあるファイル名を格納します。</p> <p>For文により、変数<code>item</code>にファイル名を配列で格納します。</p> <p> </p> <p>Redim<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%C6%A1%BC%A5%C8%A5%E1%A5%F3%A5%C8">ステートメント</a>は下記を参照。</p> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="ReDim ステートメント (Visual Basic)" src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fdocs.microsoft.com%2Fja-jp%2Fdotnet%2Fvisual-basic%2Flanguage-reference%2Fstatements%2Fredim-statement" frameborder="0" scrolling="no"></iframe></p> <p> </p> <p> </p> <p><span style="text-decoration: underline; font-size: 150%;">5. <a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a>にあるファイル名リストの値がある最後のセル位置を取得</span></p> <pre>endList = Cells(Rows.Count, 2).End(xlUp).Row</pre> <p>僕のサンプルでは、B列を基準としています。</p> <p>A列の場合、<code>Cells(Rows.Count, 1)</code>になります。</p> <p> </p> <p> </p> <p><span style="text-decoration: underline; font-size: 150%;">6. 変数itemに配列の値がある分だけ処理を繰り返す</span></p> <pre>For Each fname In item ' ' この中に処理を記述 ' Next</pre> <p>変数<code>item</code>にある値は、一つずつ変数<code>fname</code>に格納されます。</p> <p> </p> <p> </p> <p><span style="text-decoration: underline; font-size: 150%;">7. セルの値が空白の場合</span></p> <pre>If Not (fname = "") Then ' ' この中に処理を記述 ' End If </pre> <p>変数<code>fname</code>の空白は、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リから空白を取得してしまった場合のための処理です。</p> <p>※Dir関数で取得すると、最初の値は空白になると思います。</p> <p> </p> <p> </p> <p><span style="text-decoration: underline; font-size: 150%;">8. <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リにあるファイル名が<a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a>のリストにない場合、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リにあるファイル名と<a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a>にあるファイル名が一致する場合、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a>のリストに空セルがある場合</span></p> <pre>numValue = 0 numNG = 0 For n = 3 To endList listInElx = Cells(n, 2).<a class="keyword" href="http://d.hatena.ne.jp/keyword/Value">Value</a> If Not (listInElx = "") Then numValue = numValue + 1 If (fname = listInElx) Then Cells(n, 2).Offset(0, 1).<a class="keyword" href="http://d.hatena.ne.jp/keyword/Value">Value</a> = "OK" Else numNG = numNG + 1 End If Else Cells(n, 2).Offset(0, 1).<a class="keyword" href="http://d.hatena.ne.jp/keyword/Value">Value</a> = "リストが空セル" End If Next If (numValue = numNG) Then endOnlyDir = Cells(Rows.Count, 4).End(xlUp).Row If IsEmpty(Cells(3, 4).<a class="keyword" href="http://d.hatena.ne.jp/keyword/Value">Value</a>) Then Cells(3, 4).<a class="keyword" href="http://d.hatena.ne.jp/keyword/Value">Value</a> = fname Else For m = 3 To endOnlyDir listOnlyDir = Cells(m, 4).<a class="keyword" href="http://d.hatena.ne.jp/keyword/Value">Value</a> If (fname = listOnlyDir) Then chkOnlyDir = chkOnlyDir + 1 End If Next End If If (chkOnlyDir = 0) Then Cells(endOnlyDir + 1, 4).<a class="keyword" href="http://d.hatena.ne.jp/keyword/Value">Value</a> = fname End If End If </pre> <p>変数<code>numValue</code>と<code>numNG</code>は、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リにはあるが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a>にはないファイル名の取得に使用します。</p> <p>繰り返し処理は、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a>のリストにあるファイル名の分だけ実行されます。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a>のセルの空白を判定後、ファイル名が(値として)ある場合、変数<code>numValue</code>が1足されます。</p> <p>セルが空白の場合、「リストが空セル」と入力します。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リと<a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a>でファイル名が一致していれば、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a>のリストにあるファイル名の右横に「OK」と入力します。</p> <p>一致しない場合、変数<code>numNG</code>が1足されます。</p> <p>変数<code>numValue</code>と<code>numNG</code>の値が同じ場合は、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リにあるファイル名が<a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a>にあるファイル名と比較された回数とマッチしなかった回数が同じ、つまり、そのファイル名が<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リのみにあることを意味します。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リのみにあるファイル名は、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a>のリストで新たな列に入力されます。</p> <p>ファイル名の追記は、リストに設けた項目名(例えば「<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リのみ」など)を避け、既に入力された値のあるセルの下へ追記されます。</p> <p>変数<code>chkOnlyDir</code>の役割は、インクリメント処理のあるIf文で使用され、すでにファイル名が追記されているかを確認するために用意されています。</p> <p> </p> <p> </p> <p><span style="text-decoration: underline; font-size: 150%;">9. <a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a>にのみファイル名がある場合(<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リに該当ファイルがない場合)</span></p> <pre>endChk = Cells(Rows.Count, 3).End(xlUp).Row For j = 3 To endChk chkOnlyElx = Cells(j, 3).<a class="keyword" href="http://d.hatena.ne.jp/keyword/Value">Value</a> If IsEmpty(chkOnlyElx) Then Cells(j, 3).<a class="keyword" href="http://d.hatena.ne.jp/keyword/Value">Value</a> = "ファイルなし" End If Next </pre> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リと<a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a>でのファイル名を照合後、空白のセルに「ファイルなし」と入力します。</p> <p>つまり、ファイル名が一致した結果や、空セル以外の値なので、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a>のみにあるファイル名ということになります。</p> <p> </p> <p> </p> <p><span style="text-decoration: underline; font-size: 150%;">10. 処理後の確認 </span></p> <pre>e_message = "全てのファイルの確認が終わりました。" e_type = vbOKOnly e_title = "確認メッセージ" MsgBox e_message, e_type, e_title </pre> <p> </p> <p>処理を終えた後、ユーザへ完了を報告します。</p> <p> </p> <p> </p> <p> </p> <p>疲れました。大変疲れました。</p> <p>単純な処理とはいえ、コードが長くなってしまいました(もしかして100行を越えてる?)。</p> <p>あと、変数をたくさん使用してしまいましたね。</p> <p>変数をフラグとしても採用しました(分かる人は分かる)。</p> <p> </p> <p>これほど長いマクロは参考にならないかもしれません。</p> <p>でも、あると便利だと思うんですよね。</p> <p>分からないことがあれば、下のコメント欄にメッセージをください。</p> <p> </p> <p> </p> <p>以上。</p> <p> </p> <p> </p> yuki_sasano Unityを久しぶりに触った。2Dと3Dのチュートリアルから再開。 hatenablog://entry/26006613420574943 2019-09-13T22:05:27+09:00 2019-09-13T22:15:34+09:00 やっぱり面白いんだなあ、Unity。 はろー、yukiです。 最後に触ったのが2年くらい前のことです。 今夏、久しぶりに何かを作ってみたくなり、チュートリアルから再開しました。 (ブログへの投稿は月が変わってしまいました) これまでは3Dだけしか勉強していなかったのですが、今回は2Dへも挑戦。 公式から出ているチュートリアルをやってみて、メモとして残すことにしました。 結論から言うと、全体的にざっくり触れられて良い内容だったと思います。 ただ、全編英語なので、そこは覚悟しておいてください、苦手な方。 それでは順番にみていきましょう。 まずは、3Dから。 タイトルは「John Lemon's H… <p>やっぱり面白いんだなあ、Unity。</p> <p><br />はろー、<a class="keyword" href="http://d.hatena.ne.jp/keyword/yuki">yuki</a>です。</p> <p><br />最後に触ったのが2年くらい前のことです。</p> <p>今夏、久しぶりに何かを作ってみたくなり、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C1%A5%E5%A1%BC%A5%C8%A5%EA%A5%A2%A5%EB">チュートリアル</a>から再開しました。</p> <p>(ブログへの投稿は月が変わってしまいました)</p> <p> </p> <p>これまでは3Dだけしか勉強していなかったのですが、今回は2Dへも挑戦。</p> <p>公式から出ている<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C1%A5%E5%A1%BC%A5%C8%A5%EA%A5%A2%A5%EB">チュートリアル</a>をやってみて、メモとして残すことにしました。</p> <p>結論から言うと、全体的にざっくり触れられて良い内容だったと思います。</p> <p> </p> <p><strong>ただ、全編英語なので、そこは覚悟しておいてください、苦手な方。</strong></p> <p> </p> <p>それでは順番にみていきましょう。</p> <p> </p> <p>まずは、3Dから。</p> <p>タイトルは「John Lemon's Haunted Jaunt: 3D Beginner」。</p> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="John Lemon's Haunted Jaunt: 3D Beginner - Unity Learn" src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Flearn.unity.com%2Fproject%2Fjohn-lemon-s-haunted-jaunt-3d-beginner%3Flanguage%3Den" frameborder="0" scrolling="no"></iframe><cite class="hatena-citation"></cite></p> <p> </p> <p>構成は次のようになっています。<br />ーーーーーーーーーーーーーー</p> <ol> <li>Setting up 3D Beginner<br />プロジェクト作成、アセットのインポート、各種ウィンドウの説明<br /><br /></li> <li>The Player Character: Part 1<br />キャ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E9%A5%AF">ラク</a>ターの追加、Prefabsの作成、アニメーション追加、Rigidbodyの追加、Colliderの追加<br /><br /></li> <li>Player Character: Part 2<br /><a class="keyword" href="http://d.hatena.ne.jp/keyword/C%23">C#</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>作成、キャ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E9%A5%AF">ラク</a>ターをキーボードのキーで操作、歩くアニメーション追加、回転動作の追加、FixedUpdate関数、Unityのビュー設定<br /><br /></li> <li>The Environment<br />ゲームステージ追加、Directional Light設定、Global Illumination Lightmappingの設定、Navigation Meshの設定<br /><br /></li> <li>The Camera<br />カメラ設定、Virtual Camera作成、Post-Processingの設定<br /><br /></li> <li>Ending the Game<br />UIの追加、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Canvas">Canvas</a>の設定、<a class="keyword" href="http://d.hatena.ne.jp/keyword/C%23">C#</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>作成、ゲームエンディング追加<br /><br /></li> <li>Enemies, Part 1: Static Observers<br />動かない敵を追加、キャ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E9%A5%AF">ラク</a>ター発見用の視野追加、<a class="keyword" href="http://d.hatena.ne.jp/keyword/C%23">C#</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>作成、キャ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E9%A5%AF">ラク</a>ター発見、発見された時のエンディング追加、ゲーム再スタート追加<br /><br /></li> <li>Enemies, Part 2: Dynamic Observers<br />動く敵を追加、<a class="keyword" href="http://d.hatena.ne.jp/keyword/C%23">C#</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>作成、敵が動く、敵を複数配置、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D2%A5%A8%A5%E9%A5%EB%A5%AD%A1%BC">ヒエラルキー</a>の整理<br /><br /></li> <li>Audio<br />Ambient(<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B4%C4%B6%AD%B2%BB%B3%DA">環境音楽</a>、BGM)追加、<a class="keyword" href="http://d.hatena.ne.jp/keyword/C%23">C#</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>編集、ゲームエンディング時のオーディオ追加、足音の追加、PrefabsのOverride、敵の音を追加、3D音響<br /><br /></li> <li>Build, Run, Distribute<br />ビルド設定</li> </ol> <p>ーーーーーーーーーーーーーー</p> <p>この<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C1%A5%E5%A1%BC%A5%C8%A5%EA%A5%A2%A5%EB">チュートリアル</a>で躓いたのは、パート2だけですね。</p> <p>このパートでは、主題でもあるキャ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E9%A5%AF">ラク</a>ターの「歩き」で、変数isWalkingを用意します。</p> <p>これが、isWorkingになっている部分があり、isWalkingとちぐはぐしていました。</p> <p>頭の中で「walk⇔work」になり、、、まあ、初歩的なミスですね。</p> <p> </p> <p>完成後の画面はこちら。</p> <p><img class="hatena-fotolife" title="f:id:yuki_sasano:20190913221337p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/y/yuki_sasano/20190913/20190913221337.png" alt="f:id:yuki_sasano:20190913221337p:plain" /></p> <p> </p> <p> </p> <p>次に、2D。</p> <p>タイトルは「<a class="keyword" href="http://d.hatena.ne.jp/keyword/Ruby">Ruby</a>'s Adventure: 2D Beginner」。</p> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="Ruby's Adventure: 2D Beginner - Unity Learn" src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Flearn.unity.com%2Fproject%2Fruby-s-2d-rpg%3Flanguage%3Den" frameborder="0" scrolling="no"></iframe><cite class="hatena-citation"></cite></p> <p> </p> <p>構成は下記の通りです。</p> <p>ーーーーーーーーーーーーーー</p> <ol> <li>Setting Up the Unity Editor<br />プロジェクト作成、アセットのインポート、各種ウィンドウとUIの説明<br /><br /></li> <li>Main Character and First Script<br />メインシーン作成、Spriteの作成、ユニットの座標設定、ユニットのサイズ設定、<a class="keyword" href="http://d.hatena.ne.jp/keyword/C%23">C#</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>作成、Update関数、キャ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E9%A5%AF">ラク</a>ターの移動<br /><br /></li> <li>Character Controller and Keyboard Input<br />キーボード入力によるキャ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E9%A5%AF">ラク</a>ターの移動、キーボードのキー設定、時間とフレーム<br /><br /></li> <li>World Design - Tilemaps<br />Tilemapの作成、Tileの作成、Tile Palette、Pixcel Per Unit、Sprite Editor、TilesetのSlice、Layerの設定<br /><br /></li> <li>Decorating the World<br />グラフィックスの設定、Sprite Sort Point、Pivotの設定、Prefabsの作成<br /><br /></li> <li>World Interactions - Blocking Movement<br />Rigidbody2D設定、Gravityの設定、Collidersの設定、Freeze Rotationの設定、Rigidbody2D<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%DD%A1%BC%A5%CD%A5%F3%A5%C8">コンポーネント</a>、Vector2D<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%DD%A1%BC%A5%CD%A5%F3%A5%C8">コンポーネント</a>、MovePositionメソッド、Collider範囲の編集、TileへのCollider設定、ColliderのComposite、Rigidbody2DのBody Type設定<br /><br /></li> <li>World Interactions - Collectibles<br />キャ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E9%A5%AF">ラク</a>ターの体力設定、関数作成、public変数、ColliderのTrigger、Is Triggerの設定、OnTriggerEnter2D関数、Destroy関数、変数の{get {return 戻り値; }}ブロック<br /><br /></li> <li>World Interactions - Damage Zones and Enemies<br />ダメージゾーンの追加、Sleeping Modeの設定、ダメージ後の無敵状態、Draw Mode、Mesh Type、敵キャ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E9%A5%AF">ラク</a>ターの追加、敵キャ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E9%A5%AF">ラク</a>ターの動作、OnCollisionEnter2D関数<br /><br /></li> <li>Sprite Animation<br />Animator<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%DD%A1%BC%A5%CD%A5%F3%A5%C8">コンポーネント</a>、Animator Controllerの追加、Animation Window、Animationの作成、Animator Controllerの設定、Blend Treeの作成、Parameterの設定、Motionの追加、<a class="keyword" href="http://d.hatena.ne.jp/keyword/C%23">C#</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>作成、Transitionの設定<br /><br /></li> <li>World Interactions - Projectile<br />発射物の作成、<a class="keyword" href="http://d.hatena.ne.jp/keyword/C%23">C#</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>作成、Instantiate関数、Quaternion、キー入力による発射、Awake変数、Layerの設定、敵キャ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E9%A5%AF">ラク</a>ターがHit時の動作<br /><br /></li> <li>Camera - Cinemachine<br />Cinemachineインストール、Virtual Cameraの設定、Camera Modeの設定、解像力比の設定、Cinemachine Confiner、Layerの設定<br /><br /></li> <li>Visual Styling - Particles<br />エフェクト追加、Particle Systemの追加、Random Between Two Constants、エフェクトのフェードアウト、敵キャ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E9%A5%AF">ラク</a>ターへのエフェクト追加、Simulation Space、Stop関数<br /><br /></li> <li>Visual Styling - UI - Head-Up Display<br />UI <a class="keyword" href="http://d.hatena.ne.jp/keyword/Canvas">Canvas</a>の追加、Render Mode、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Canvas">Canvas</a> Scaler、UIのイメージ編集、Anchor、キャ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E9%A5%AF">ラク</a>ターの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DD%A1%BC%A5%C8%A5%EC%A1%BC%A5%C8">ポートレート</a>と追加、体力バー、<a class="keyword" href="http://d.hatena.ne.jp/keyword/C%23">C#</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>作成、UnityEngine.UI宣言<br /><br /></li> <li>World Interactions - Dialogue Raycast<br /><a class="keyword" href="http://d.hatena.ne.jp/keyword/NPC">NPC</a>の追加、Raycastの追加、RaycastHit2D関数、<a class="keyword" href="http://d.hatena.ne.jp/keyword/NPC">NPC</a>レイヤーの作成、ダイアログ用UIの作成、Text Mesh Proの追加、<a class="keyword" href="http://d.hatena.ne.jp/keyword/C%23">C#</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>作成<br /><br /></li> <li>Audio<br />BGMの追加、Spatial Blend(2D/3D)、AudioSource<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%DD%A1%BC%A5%CD%A5%F3%A5%C8">コンポーネント</a>、PlaySound関数、敵キャ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E9%A5%AF">ラク</a>ターへ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B5%A5%A6%A5%F3%A5%C9">サウンド</a>追加、Audio Litenerの設定、3D Sound Settingsの設定、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B5%A5%A6%A5%F3%A5%C9">サウンド</a>の遠近<br /><br /></li> <li>Build, Run, Distribute<br />プレイヤー設定、ビルド設定、ビルド</li> </ol> <p>ーーーーーーーーーーーーーー</p> <p>この<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C1%A5%E5%A1%BC%A5%C8%A5%EA%A5%A2%A5%EB">チュートリアル</a>では、パート12の「ProjectileがEnemyにhitした時の処理」で躓きました。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C1%A5%E5%A1%BC%A5%C8%A5%EA%A5%A2%A5%EB">チュートリアル</a>では、ProjectileがEnemyにHitした時の処理には<code>OnCollisionEnter2D()</code>が使用されています。</p> <p>これはColliderを設定されたObjectが、同じくColliderを設定された別のObjectと衝突した時に使用される関数です。</p> <p>僕がこれを使用した時、Projectileは衝突しても処理(Destroy)せず、Enemyもそのまま。</p> <p>本来意図する動きとは異なる挙動でした。</p> <p>そこで、Objectが衝突した時にTriggerを発動する<code>OnTriggerEnter2D()</code>を使用しました。</p> <p>処理の中身は、何一つ変えていません。</p> <p>すると、意図した動き(ProjectileのDestroy、EnemyへのHit判定)が実現できました。</p> <p><code>OnCollisionEnter2D()</code>が正しいとは思いますが、まあこういうこともあります。</p> <p>そんな二つの違いは、下記を参考ください。</p> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="Collider2D-OnCollisionEnter2D(Collision2D) - Unity スクリプトリファレンス" src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fdocs.unity3d.com%2Fja%2Fcurrent%2FScriptReference%2FCollider2D.OnCollisionEnter2D.html" frameborder="0" scrolling="no"></iframe></p> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="Collider2D-OnTriggerEnter2D(Collider2D) - Unity スクリプトリファレンス" src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fdocs.unity3d.com%2Fja%2Fcurrent%2FScriptReference%2FCollider2D.OnTriggerEnter2D.html" frameborder="0" scrolling="no"></iframe></p> <p>その他は特に問題なく進められたと思います。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C1%A5%E5%A1%BC%A5%C8%A5%EA%A5%A2%A5%EB">チュートリアル</a>を終えても、追加できるアニメーションや<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B5%A5%A6%A5%F3%A5%C9">サウンド</a>があり、自分なりにアレンジもできます。</p> <p> </p> <p>完成後の画面はこちら。</p> <p><img class="hatena-fotolife" title="f:id:yuki_sasano:20190913221425p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/y/yuki_sasano/20190913/20190913221425.png" alt="f:id:yuki_sasano:20190913221425p:plain" /></p> <p> </p> <p> </p> <p>さてさて。</p> <p>Unityを学ぶなら、まずはUnity Learnへアクセスするのが良いです。</p> <p>勉強の仕方は色々ですが、勉強用の書籍を買わずとも、勉強はできます。</p> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="Unity Learn" src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Flearn.unity.com%2F" frameborder="0" scrolling="no"></iframe><cite class="hatena-citation"></cite></p> <p>勉強が足りなくなったら、書籍に頼るのも一つの手ですね。</p> <p><br />ちなみに、現在の僕はオリジナルゲームを開発中です。</p> <p>3Dの簡単なものですが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C1%A5%E5%A1%BC%A5%C8%A5%EA%A5%A2%A5%EB">チュートリアル</a>をするだけで、結構できてしまうものですね。</p> <p>(でも、その先の完成度を高めるまでが、これまた遠い)</p> <p> </p> <p>たぶん、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a>向けに公開するまでトライすると思います。</p> <p> </p> <p><br />以上。</p> <p> </p> <p> </p> yuki_sasano 【Excel】隣のセルを参照し、現在のセルより大きい場合に赤く塗りつぶす。 hatenablog://entry/26006613420438333 2019-09-04T19:50:06+09:00 2022-01-10T18:34:15+09:00 「〇〇の場合」って、If文だと思うでしょ、普通。 はろー、yukiです。 Excelの条件付き書式が便利なのですが、少し場合分けしようと思い、詰まったのでメモ。 値を比較してセルを塗りつぶす、簡単な処理です。 (多くの人はIf文の良否判定だと思いますよね。。。ね?) 手順は下記。 ーーーーーーーーーーーーーー 1. 現在のセルに 条件付き書式を設定 2. 隣接するセルと値を比較 3. 比較した時、現在のセルが大きければ、赤色でセルを塗りつぶす 4. 行(あるいは列)へ展開 ーーーーーーーーーーーーーー ※もっと簡単な方法はページ最後。 時間のない方は次の数式をコピーして使用してください。 =$… <p>「〇〇の場合」って、If文だと思うでしょ、普通。</p> <p> </p> <p>はろー、<a class="keyword" href="http://d.hatena.ne.jp/keyword/yuki">yuki</a>です。</p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a>の条件付き書式が便利なのですが、少し場合分けしようと思い、詰まったのでメモ。</p> <p>値を比較してセルを塗りつぶす、簡単な処理です。</p> <p>(多くの人はIf文の良否判定だと思いますよね。。。ね?)</p> <p> </p> <p>手順は下記。</p> <p>ーーーーーーーーーーーーーー</p> <p>1. 現在のセルに 条件付き書式を設定</p> <p>2. 隣接するセルと値を比較</p> <p>3. 比較した時、現在のセルが大きければ、赤色でセルを塗りつぶす</p> <p>4. 行(あるいは列)へ展開</p> <p>ーーーーーーーーーーーーーー</p> <p>※もっと簡単な方法はページ最後。</p> <p> </p> <p>時間のない方は次の数式をコピーして使用してください。</p> <pre>=$B3&gt;$C3</pre> <p> </p> <p> </p> <p>それでは順番にみていきましょう。</p> <p> </p> <p><span style="text-decoration: underline; font-size: 150%;">1. 現在のセルに 条件付き書式を設定</span></p> <p>今回使用する条件付き書式は、[ホーム]タブから下図の手順でアクセスしてください。</p> <p><img class="hatena-fotolife" title="f:id:yuki_sasano:20190904153357p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/y/yuki_sasano/20190904/20190904153357.png" alt="f:id:yuki_sasano:20190904153357p:plain" /></p> <p><img class="hatena-fotolife" title="f:id:yuki_sasano:20190904153359p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/y/yuki_sasano/20190904/20190904153359.png" alt="f:id:yuki_sasano:20190904153359p:plain" /></p> <p> </p> <p> </p> <p><span style="text-decoration: underline; font-size: 150%;">2. 隣接するセルと値を比較</span></p> <p>使用する数式は下記です。</p> <pre>="隣接するセル"&gt;"現在のセル"</pre> <p> </p> <p>例えば、次のようになります。</p> <pre>=B3&gt;C3</pre> <p> </p> <p><code>&gt;</code>は比較<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B1%E9%BB%BB%BB%D2">演算子</a>で、例えばセル内で関数として使用する場合、bool型になります。</p> <p>下図をご参考ください。</p> <p><img class="hatena-fotolife" title="f:id:yuki_sasano:20190904153450p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/y/yuki_sasano/20190904/20190904153450.png" alt="f:id:yuki_sasano:20190904153450p:plain" /></p> <p> </p> <p> </p> <p><span style="text-decoration: underline; font-size: 150%;">3. 比較した時、現在のセルが大きければ、赤色でセルを塗りつぶす</span></p> <p>塗りつぶしの設定は下図になります。</p> <p><img class="hatena-fotolife" title="f:id:yuki_sasano:20190904153503p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/y/yuki_sasano/20190904/20190904153503.png" alt="f:id:yuki_sasano:20190904153503p:plain" /></p> <p> </p> <p> </p> <p><span style="text-decoration: underline; font-size: 150%;">4. 行(あるいは列)へ展開</span></p> <p>列はそのままで、行方向へ同じ書式を適用したいので、下記になります。</p> <pre>=$"隣接するセル"&gt;$"現在のセル"</pre> <p>※セルを選択し、F4キーを3回押すと早い。</p> <p> </p> <p>例えば、次のようになります。</p> <pre>=$B3&gt;$C3</pre> <p> </p> <p> </p> <p>最終的には下図のようになります。</p> <p><img class="hatena-fotolife" title="f:id:yuki_sasano:20190904153520p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/y/yuki_sasano/20190904/20190904153520.png" alt="f:id:yuki_sasano:20190904153520p:plain" /></p> <p> </p> <p> </p> <p>一見すると、かなり簡単な内容ですが、触れる機会が少ないと迷ってしまいますね。</p> <p> </p> <p> </p> <p><span style="text-decoration: underline; font-size: 150%;">補足</span></p> <p>上記の後、もっと簡単な方法に気付きました。というか、おそらくこれが一般的な方法。</p> <p> </p> <p>「指定の値を含むセルだけを書式設定」を選択し、[次の値より小さい]を条件にする。</p> <p>セルの指定方法方は、下図のように<code>$</code>を付せば、行/列方向へも適用できますね。</p> <p><img class="hatena-fotolife" title="f:id:yuki_sasano:20190904160100p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/y/yuki_sasano/20190904/20190904160100.png" alt="f:id:yuki_sasano:20190904160100p:plain" /></p> <p> </p> <p>まあ、こういうこともあります。</p> <p> </p> <script async="" src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-3087197401719727" crossorigin="anonymous"></script> <p><ins class="adsbygoogle" style="display: block;" data-ad-client="ca-pub-3087197401719727" data-ad-slot="8835819497" data-ad-format="auto" data-full-width-responsive="true"> </ins></p> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> <p> </p> <p>以上。</p> <p> </p> <p> </p> yuki_sasano 【VBA】任意のセルからセルまでを指定して結合させ、その処理を指定した任意のセルまで繰り返す。【Excel】 hatenablog://entry/26006613375366146 2019-07-21T21:11:18+09:00 2019-09-04T19:52:50+09:00 同じ作業は繰り返したいよね。 はろー、yukiです。 だから、vbaでマクロを組みます。 今回の内容は下記のとおりです。 ーーーーーーーーーーーーーー 結合する開始セルと選択 結合する終了セルを選択 結合の処理を任意のセル(行)まで繰り返す ーーーーーーーーーーーーーー まずは、処理の流れを画像で説明します。 1. マクロを設定したボタンをクリック 2. 結合する部分の開始セルを指定(繰り返し処理の開始セルにもあたる) 3. 結合する部分の終了セルを指定 4. 結合の処理を継続するセルを指定 5. セルに値があるため、結合の許可を確認 6. 許可した部分が結合され、次の部分の結合の許可を確認 … <p>同じ作業は繰り返したいよね。</p> <p> </p> <p>はろー、<a class="keyword" href="http://d.hatena.ne.jp/keyword/yuki">yuki</a>です。</p> <p> </p> <p>だから、<a class="keyword" href="http://d.hatena.ne.jp/keyword/vba">vba</a>でマクロを組みます。</p> <p>今回の内容は下記のとおりです。</p> <p>ーーーーーーーーーーーーーー</p> <ol> <li>結合する開始セルと選択</li> <li>結合する終了セルを選択</li> <li>結合の処理を任意のセル(行)まで繰り返す</li> </ol> <p>ーーーーーーーーーーーーーー</p> <p> </p> <p>まずは、処理の流れを画像で説明します。</p> <p><span style="text-decoration: underline;">1. マクロを設定したボタンをクリック</span></p> <p><img class="hatena-fotolife" title="f:id:yuki_sasano:20190720233602p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/y/yuki_sasano/20190720/20190720233602.png" alt="f:id:yuki_sasano:20190720233602p:plain" /></p> <p> </p> <p><span style="text-decoration: underline;">2. 結合する部分の開始セルを指定(繰り返し処理の開始セルにもあたる)</span></p> <p><img class="hatena-fotolife" title="f:id:yuki_sasano:20190720233637p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/y/yuki_sasano/20190720/20190720233637.png" alt="f:id:yuki_sasano:20190720233637p:plain" /></p> <p><br /><br /></p> <p><span style="text-decoration: underline;">3. 結合する部分の終了セルを指定</span></p> <p><img class="hatena-fotolife" title="f:id:yuki_sasano:20190720233708p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/y/yuki_sasano/20190720/20190720233708.png" alt="f:id:yuki_sasano:20190720233708p:plain" /></p> <p> </p> <p><span style="text-decoration: underline;">4. 結合の処理を継続するセルを指定</span></p> <p><img class="hatena-fotolife" title="f:id:yuki_sasano:20190720233757p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/y/yuki_sasano/20190720/20190720233757.png" alt="f:id:yuki_sasano:20190720233757p:plain" /></p> <p> </p> <p><span style="text-decoration: underline;">5. セルに値があるため、結合の許可を確認</span></p> <p><img class="hatena-fotolife" title="f:id:yuki_sasano:20190720233743p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/y/yuki_sasano/20190720/20190720233743.png" alt="f:id:yuki_sasano:20190720233743p:plain" /></p> <p> </p> <p><span style="text-decoration: underline;">6. 許可した部分が結合され、次の部分の結合の許可を確認</span></p> <p><img class="hatena-fotolife" title="f:id:yuki_sasano:20190720233855p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/y/yuki_sasano/20190720/20190720233855.png" alt="f:id:yuki_sasano:20190720233855p:plain" /></p> <p> </p> <p><span style="text-decoration: underline;">7. 指定した全てのセルの結合が完了</span></p> <p><img class="hatena-fotolife" title="f:id:yuki_sasano:20190720233957p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/y/yuki_sasano/20190720/20190720233957.png" alt="f:id:yuki_sasano:20190720233957p:plain" /></p> <p> </p> <script async="" src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <p><ins class="adsbygoogle" style="display: block;" data-ad-client="ca-pub-3087197401719727" data-ad-slot="8835819497" data-ad-format="auto" data-full-width-responsive="true"> </ins></p> <script>// <![CDATA[ (adsbygoogle = window.adsbygoogle || []).push({}); // ]]></script> <p> </p> <p>さて、実際に<a class="keyword" href="http://d.hatena.ne.jp/keyword/VBA">VBA</a>のコードを見てみましょう。</p> <p><span style="font-size: 80%;">※すぐに使用したい方は、コードを全コピーしてください。</span></p> <pre><code> Sub セル結合() ' ' セル結合 Macro ' ' 任意のセルを選択し、任意のセルまでを結合する ' 結合の処理は、任意の選択したセルまでとする <br /> ' 変数を定義 Dim origin, endX, endY Dim originR, originC Dim endXR, endXC Dim endYR, endYC ' 開始セルを選択 On Error Resume Next Set origin = Application.InputBox( _ Prompt:="開始するセルを選択してください。", _ Type:=8) ' 選択したセルのアドレスを取得 origin = origin.Address(False, False) ' originのRowとColumnを取得 originR = Range(origin).Row originC = Range(origin).Column If Not IsEmpty(origin) Then ' 結合するセルを選択 On Error Resume Next Set endX = Application.InputBox( _ Prompt:="結合するセルを選択してください。", _ Type:=8) endX = endX.Address(False, False) endXR = Range(endX).Row endXC = Range(endX).Column If Not IsEmpty(endX) Then ' 繰り返しを終了するセルの選択 On Error Resume Next Set endY = Application.InputBox( _ Prompt:="処理を継続するセルを選択してください。", _ Type:=8) endY = endY.Address(False, False) endYR = Range(endY).Row endYC = Range(endY).Column ' 使用しない If Not IsEmpty(endY) Then ' 繰り返し処理 For i = originR To endYR ' 結合の処理 Range(origin &amp; ":" &amp; endX).Merge ' 開始セルと結合セルを下へ(行を)一つずつ移動 originR = originR + 1 endXR = endXR + 1 ' 変数を使用してセルを指定 origin = Cells(originR, originC).Address(False, False) endX = Cells(endXR, endXC).Address(False, False) Next Else MsgBox ("処理を中断します。") End If Else MsgBox ("処理を中断します。") End If Else MsgBox ("処理を中断します。") End If End Sub</code></pre> <p> </p> <script async="" src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <p><ins class="adsbygoogle" style="display: block;" data-ad-client="ca-pub-3087197401719727" data-ad-slot="8835819497" data-ad-format="auto" data-full-width-responsive="true"> </ins></p> <script>// <![CDATA[ (adsbygoogle = window.adsbygoogle || []).push({}); // ]]></script> <p> </p> <p>それでは順番に見ていきましょう。</p> <p><span style="text-decoration: underline;">1. 変数の定義</span></p> <pre><code> Dim origin, endX, endY ' 選択したセルのRange値を格納 Dim originR, originC ' 変数originの行/列 Dim endXR, endXC ' 変数endXの行/列 Dim endYR, endYC ' 変数endYの行/列</code></pre> <p>originは開始セル、endXは結合の終了セル、endYは処理の継続終了セルです。</p> <p> </p> <p><span style="text-decoration: underline;">2. 開始セルの指定と、セルのアドレスを取得、RangeからCellsへ変換</span></p> <pre><code> On Error Resume Next Set origin = Application.InputBox( _ Prompt:="開始するセルを選択してください。", _ Type:=8) ' 選択したセルのアドレスを取得 origin = origin.Address(False, False) ' originのRowとColumnを取得 originR = Range(origin).Row originC = Range(origin).Column </code></pre> <p>On Error Resume Nextで、エラー時にも処理を続行させています。</p> <p>Application.InputBoxメソッドでは、Typeを8にし、参照したセル値を取得しています。</p> <p> ※参照: <a href="https://docs.microsoft.com/ja-jp/office/vba/api/excel.application.inputbox" target="_blank">Application.InputBox メソッド (Excel) | Microsoft Docs</a></p> <p>変数originには、Rangeオブジェクトが格納されます。</p> <p>originRとoriginCは、後で使用するCellsオブジェクトの処理のため、行列値を格納。</p> <p> </p> <p><span style="text-decoration: underline;">3. 結合の終了セルの指定と、セルのアドレスを取得、RangeからCellsへ変換</span></p> <pre><code> If Not IsEmpty(origin) Then ' 結合するセルを選択 On Error Resume Next Set endX = Application.InputBox( _ Prompt:="結合するセルを選択してください。", _ Type:=8) endX = endX.Address(False, False) endXR = Range(endX).Row endXC = Range(endX).Column</code></pre> <p>If文を使用し、変数originの値が空でない場合、処理を継続させます。</p> <p>変数endXは、結合セルの末を選択させるものとして用意します。</p> <p>If文内の処理は項目2と同じです。</p> <p> </p> <p><span style="text-decoration: underline;">4. 繰り返し処理用セルの指定と、セルのアドレスを取得、RangeからCellsへ変換</span></p> <pre><code> If Not IsEmpty(endX) Then ' 繰り返しを終了するセルの選択 On Error Resume Next Set endY = Application.InputBox( _ Prompt:="処理を継続するセルを選択してください。", _ Type:=8) endY = endY.Address(False, False) endYR = Range(endY).Row endYC = Range(endY).Column ' 使用しない</code></pre> <p>変数endYは、継続した処理を終了させるセルを指定します。</p> <p>なお、変数endYCは用意していますが、使用しません。継続の処理は、行ごとに実行されるためです。</p> <p> </p> <p><span style="text-decoration: underline;">5. セル結合、繰り返し処理</span></p> <pre><code> If Not IsEmpty(endY) Then ' 繰り返し処理 For i = originR To endYR ' 結合の処理 Range(origin &amp; ":" &amp; endX).Merge ' 開始セルと結合セルを下へ(行を)一つずつ移動 originR = originR + 1 endXR = endXR + 1 ' 変数を使用してセルを指定 origin = Cells(originR, originC).Address(False, False) endX = Cells(endXR, endXC).Address(False, False) Next </code></pre> <p>繰り返し処理は、開始セルの行から終了セルの行までを実行させます。<br /> ex.) 1行目から5行目までであれば、5回繰り返す</p> <p>結合処理は、Range.Mergeメソッドを使用します(Rangeオブジェクトでのみ使用可)。</p> <p>結合処理の後、繰り返しのため、直下のセルへ処理を移動させます。</p> <p>ここで、Cellsオブジェクトで変換した変数xxxRが使用されます。</p> <p>次の処理で結合させるセルを新たにAddressメソッドでRangeオブジェクトに置換。</p> <p>ここで、Cellsオブジェクトで変換した変数xxxCが使用されます。</p> <p>変数xxxC(列の値)はそのままにします。列は処理中に移動しません。</p> <p> </p> <p><span style="text-decoration: underline;">6. その他(変数の値を確認すること、ちょっと丁寧なIf文)</span></p> <pre><code> Debug.Print (originR)</code></pre> <p>今回用意した変数は、セル参照ばかりですので、逐次どの部分を取得しているかを確認。</p> <p> </p> <pre><code> Else MsgBox ("処理を中断します。") End If</code></pre> <p>セルが選択されなかった(ダイアログで[キャンセル]をクリックした)場合の処理です。</p> <p>全ての処理を中断させます。</p> <p> </p> <p> </p> <p> </p> <p>説明を終わります。</p> <p>セル結合がRangeしかできないことと、RangeからCellsへの変換が少し面倒でした。</p> <p>InputBoxを使用したのは、他者による運用を考慮し、丁寧にしたためです。</p> <p> </p> <p> </p> <p>セル結合の繰り返しは出番が少ないかもしれませんが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/GUI">GUI</a>操作では骨が折れますね。</p> <p>大量な<a class="keyword" href="http://d.hatena.ne.jp/keyword/GUI">GUI</a>操作はあまり好きではないので、今回作ってみました。</p> <p>継続の繰り返しはないが、結合したい部分がバラバラの時は、配列に格納が良いかも。</p> <p>ちなみに、Mergeが使えるということは、Unmergeも使えるということです。</p> <p>ぜひご活用ください。</p> <p> </p> <p> </p> <p>以上。</p> <p> </p> <p> </p> yuki_sasano 【Windows10】キーボードのレイアウトを変更する方法。 hatenablog://entry/17680117127211690379 2019-07-01T18:11:38+09:00 2019-07-01T18:11:38+09:00 ````って、半角/全角が変わりませんがな。 はろー、yukiです。 外国語仕様のPCを手にし、日本語で使おうとする時、まず文字入力に困りますね。 外国語仕様のキーボードで日本語を使おうとする時も同じですね。 今回はハードウェアキーボードのレイアウトを変更する方法になります。 手順は次の通りに進めれば、簡単にできます。 1. デスクトップを右クリックし、[個人用設定]を選択。 2. [ホーム]を選択。※スタートップメニューから[設定]を選択しても可 3. [設定]の[ホーム]から[時刻と言語]を選択。 4. [時刻と言語]の[言語]を選択。 5. [言語]の「日本語」を選択。 6. 「日本語」… <p>````って、半角/全角が変わりませんがな。</p> <p> </p> <p>はろー、<a class="keyword" href="http://d.hatena.ne.jp/keyword/yuki">yuki</a>です。</p> <p> </p> <p>外国語仕様のPCを手にし、日本語で使おうとする時、まず文字入力に困りますね。</p> <p>外国語仕様のキーボードで日本語を使おうとする時も同じですね。</p> <p>今回はハードウェアキーボードのレイアウトを変更する方法になります。</p> <p> </p> <p>手順は次の通りに進めれば、簡単にできます。</p> <p><span style="text-decoration: underline;">1. デスクトップを右クリックし、[個人用設定]を選択。</span></p> <p><img class="hatena-fotolife" title="f:id:yuki_sasano:20190701152045p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/y/yuki_sasano/20190701/20190701152045.png" alt="f:id:yuki_sasano:20190701152045p:plain" /></p> <p> </p> <p>2. [ホーム]を選択。※スタートップメニューから[設定]を選択しても可</p> <p><img class="hatena-fotolife" title="f:id:yuki_sasano:20190701152048p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/y/yuki_sasano/20190701/20190701152048.png" alt="f:id:yuki_sasano:20190701152048p:plain" /></p> <p> </p> <p>3. [設定]の[ホーム]から[時刻と言語]を選択。</p> <p><img class="hatena-fotolife" title="f:id:yuki_sasano:20190701152052p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/y/yuki_sasano/20190701/20190701152052.png" alt="f:id:yuki_sasano:20190701152052p:plain" /></p> <p> </p> <p>4. [時刻と言語]の[言語]を選択。</p> <p><img class="hatena-fotolife" title="f:id:yuki_sasano:20190701152056p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/y/yuki_sasano/20190701/20190701152056.png" alt="f:id:yuki_sasano:20190701152056p:plain" /></p> <p> </p> <p>5. [言語]の「日本語」を選択。</p> <p><img class="hatena-fotolife" title="f:id:yuki_sasano:20190701152100p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/y/yuki_sasano/20190701/20190701152100.png" alt="f:id:yuki_sasano:20190701152100p:plain" /></p> <p> </p> <p>6. 「日本語」のオプションを選択。</p> <p><img class="hatena-fotolife" title="f:id:yuki_sasano:20190701152105p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/y/yuki_sasano/20190701/20190701152105.png" alt="f:id:yuki_sasano:20190701152105p:plain" /></p> <p> </p> <p>7. ハードウェアキーボードレイアウトの「レイアウトを変更する」を選択。</p> <p><img class="hatena-fotolife" title="f:id:yuki_sasano:20190701152116p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/y/yuki_sasano/20190701/20190701152116.png" alt="f:id:yuki_sasano:20190701152116p:plain" /></p> <p> </p> <p>8. ハードウェアキーボードレイアウトのウィンドウが表示される。</p> <p><img class="hatena-fotolife" title="f:id:yuki_sasano:20190701152122p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/y/yuki_sasano/20190701/20190701152122.png" alt="f:id:yuki_sasano:20190701152122p:plain" /></p> <p> </p> <p>9. 変更するレイアウトをプルダウンから選択。</p> <p><img class="hatena-fotolife" title="f:id:yuki_sasano:20190701152125p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/y/yuki_sasano/20190701/20190701152125.png" alt="f:id:yuki_sasano:20190701152125p:plain" /></p> <p> </p> <p>10. 変更後、「今すぐ再起動する」をクリックし、再起動後に適用が完了。</p> <p><img class="hatena-fotolife" title="f:id:yuki_sasano:20190701152129p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/y/yuki_sasano/20190701/20190701152129.png" alt="f:id:yuki_sasano:20190701152129p:plain" /></p> <p> </p> <p>ちなみに、これでもレイアウトがうまく変わらないという方は[言語設定]を見直しましょう。</p> <p>項目6のところで、複数の言語がある場合、優先する言語を選ぶ必要があります。</p> <p>そのやり方は次の通りです。</p> <p>1. タスクバーの右にある言語ボタンをクリック。</p> <p><img class="hatena-fotolife" title="f:id:yuki_sasano:20190701154750p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/y/yuki_sasano/20190701/20190701154750.png" alt="f:id:yuki_sasano:20190701154750p:plain" /></p> <p> </p> <p>2. [言語設定]を選択。</p> <p><img class="hatena-fotolife" title="f:id:yuki_sasano:20190701154742p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/y/yuki_sasano/20190701/20190701154742.png" alt="f:id:yuki_sasano:20190701154742p:plain" /></p> <p> </p> <p>3. 該当言語(日本語)をクリックし、表示された矢印をクリックして優先順位を高める。</p> <p><img class="hatena-fotolife" title="f:id:yuki_sasano:20190701154745p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/y/yuki_sasano/20190701/20190701154745.png" alt="f:id:yuki_sasano:20190701154745p:plain" /></p> <p> </p> <p>これで快適なPCライフが送れることと思います。</p> <p> </p> <p> </p> <p> </p> <p>以上。</p> <p> </p> <p> </p> yuki_sasano 中小企業の人材採用は、なぜうまくいかないのか。 hatenablog://entry/17680117127026693654 2019-04-13T14:48:16+09:00 2023-11-18T22:49:43+09:00 ワンマン体質は、衰退の経過を辿る。 はろー、yukiです。 企業が直面している人手不足、その実際は倒産に表われています。 上記は2018年度のデータです。 人手不足の倒産とはいっても、その多くは経営者等のリーダー不在が占めます。 ですが、実務を担う人材が不足しているのも事実。 ビジネスの中身を動かすリソースがなければ、事業縮小しない限り、衰退してしまうわけです。 さて、定期的な人材獲得を戦略にしている企業とは違い、場当たりの人材獲得は、今の時代、大変な苦労をすることになっています。 その最たる理由は、人材市場が売り手市場になっているからにほかなりません。 ですが、人材サービスを間違えなければ、… <p>ワンマン体質は、衰退の経過を辿る。</p> <p> </p> <p>はろー、<a class="keyword" href="https://d.hatena.ne.jp/keyword/yuki">yuki</a>です。</p> <p> </p> <p>企業が直面している人手不足、その実際は倒産に表われています。</p> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="2018年度「人手不足」関連倒産" src="https://hatenablog-parts.com/embed?url=http%3A%2F%2Fwww.tsr-net.co.jp%2Fnews%2Fanalysis%2F20190405_01.html" frameborder="0" scrolling="no"></iframe>上記は2018年度のデータです。</p> <p>人手不足の倒産とはいっても、その多くは経営者等のリーダー不在が占めます。</p> <p>ですが、実務を担う人材が不足しているのも事実。</p> <p>ビジネスの中身を動かすリソースがなければ、事業縮小しない限り、衰退してしまうわけです。</p> <p> </p> <p>さて、定期的な人材獲得を戦略にしている企業とは違い、場当たりの人材獲得は、今の時代、大変な苦労をすることになっています。</p> <p>その最たる理由は、人材市場が売り手市場になっているからにほかなりません。</p> <p>ですが、人材サービスを間違えなければ、応募者が一人もないということはないでしょう。</p> <p>問題は、採用した後に定着させられるかどうか。</p> <p> </p> <p>今回は、この人材定着化に着目し、中小企業の人材採用を考えます。</p> <p> </p> <p>僕の好きな本に『<a target="_blank" href="https://www.amazon.co.jp/gp/product/4862761682/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=4862761682&amp;linkCode=as2&amp;tag=snowworldsnow-22&amp;linkId=eaabef5ad80d5b689f084eec53127cfc">起業家はどこで選択を誤るのか――スタートアップが必ず陥る9つのジレンマ</a><img style="border: none !important; margin: 0px !important;" src="//ir-jp.amazon-adsystem.com/e/ir?t=snowworldsnow-22&amp;l=am2&amp;o=9&amp;a=4862761682" alt="" width="1" height="1" border="0" />』があります。</p> <p>この本は、起業家が起業した後に出会う人々の選択について書かれたものです。</p> <p>起業と人材採用は、まるで異なっていますが、人の選択については参考になるものがあります。</p> <p> </p> <p>中小企業では、人材採用時、どの人材を雇用するかは<a class="keyword" href="https://d.hatena.ne.jp/keyword/%A5%C8%A5%C3%A5%D7%A5%C0%A5%A6%A5%F3">トップダウン</a>で考えられるものです。</p> <p>多くは「特定の経歴」がフィルターとして用意され、面接で人格を評価する。</p> <p>実は、雇用後に新入社員が定着できるかどうかは、このフィルターが大きな影響力を持ちます。</p> <p> </p> <p>結論からいうに、極端な話、フィルターは現場の人間に作らせるべきでしょう。</p> <p>なぜなら、どのような人材が必要かについては、現場が最もよく知っているからです。</p> <p> </p> <p>そのため、人材獲得は次のようなステップが 望ましい。</p> <p>ーーーーーーーーーーーーーーー</p> <ol> <li>現場の課題を<a class="keyword" href="https://d.hatena.ne.jp/keyword/%A5%D2%A5%A2%A5%EA">ヒアリ</a>ング</li> <li>人材に必要な能力を明確に項目化</li> <li>能力リストを現場と認識共有</li> <li>人材募集</li> </ol> <p>ーーーーーーーーーーーーーーー</p> <p> 現場の課題は様々に発生するものです。</p> <p>その課題を明確にし、現場がどれだけコミットできるようにするか。</p> <p>経営手腕の良し悪しは、そういった環境の用意に<a class="keyword" href="https://d.hatena.ne.jp/keyword/%C7%A1%BC%C2%A4%CB">如実に</a>表れます。</p> <p> </p> <p>課題解決の実際を担う現場から<a class="keyword" href="https://d.hatena.ne.jp/keyword/%A5%D2%A5%A2%A5%EA">ヒアリ</a>ングをしてみると、実に多くのことを耳にします。</p> <p>決め手となるのは、それぞれの従業員が繰り返して口にした内容になります。</p> <p>それが、現場全体が見えている課題で、質の良いフィルターの材料になります。</p> <p> </p> <p>フィルターは「能力リスト」になります。</p> <p>「能力リスト」を作成する時、具体的であるほど良いでしょう。</p> <p>具体的なほど、入社後とのギャップが小さくなるものだからです。</p> <p> </p> <p>また、「能力リスト」を共有することで、新入社員を受け入れる準備をさせることができます。</p> <p>新入社員は自分たちが要求した人材、といったように、人材採用の責任意識を従業員にも持たせられるからです。</p> <p>概して、現場は面倒な事柄を避けがちで、新入社員への教育はその一つでもあります。</p> <p>ですが、新入社員の定着化を図るためには、現場の対応(受け入れ)が不可欠になります。</p> <p> </p> <p>話は変わって、採用時に使用される人材測定ツール(SPIや<a class="keyword" href="https://d.hatena.ne.jp/keyword/%A5%AF%A5%EC%A5%DA%A5%EA%A5%F3">クレペリン</a>検査など)があります。</p> <p>適性診断では、言語・非言語の能力や性格を測り、中には一般常識を問うものもあります。</p> <p>こうしたツールは、大量な人材募集をかける際には極めて有効です。</p> <p>ですが、少人数の選定に限っては、導入は慎重になるべきでしょう。</p> <p> </p> <p>もう少しいうと、思い付きでそういったツールを導入するのも控えるべきです。</p> <p>もし導入したいのであれば、すでにいる従業員に対して実施した後が良いでしょう。</p> <p>なぜなら、従業員と応募してきた人材の結果が、かけ離れている状況を避けるためです。</p> <p>(応募してきた人材の方が結果が良かった場合、それはそれで定着化に悪影響をもたらす)</p> <p> </p> <p> </p> <p>結局のところ、どのリソースが必要なのかは、リソースに聞くのが最善のように思います。</p> <p> </p> <p> </p> <p>以上。</p> <p> </p> <p> </p> yuki_sasano 【2019年】アメリカのスタートアップに学ぶビジネスモデル【起業】 hatenablog://entry/10257846132703515737 2019-01-12T23:08:37+09:00 2019-01-27T20:30:24+09:00 ITが進むにつれ、スタートアップの起業も難しくなってくる。 はろー、yukiです。 ITイノベーションって最近、聞かなくなりましたね。 ライブコマースとか、個人的にはイノベーティブだと思いましたけど...。 通販番組に勝るほどの影響力はないにしても、購買意欲の増強剤にはなりましたよね。 さて、毎年のことですが、今年も2019年版のアメリカのスタートアップを紹介します。 ですが、実は、今年から趣向を変えました。 このブログでは、アメリカのみを対象としていますが、世界各国のスタートアップをMediumでまとめています(国や都市は明記していません)。 このブログでは、アメリカに限り、内容を引用する形… <p>ITが進むにつれ、スタートアップの起業も難しくなってくる。</p> <p> </p> <p>はろー、<a class="keyword" href="http://d.hatena.ne.jp/keyword/yuki">yuki</a>です。</p> <p> </p> <p>IT<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A4%A5%CE%A5%D9%A1%BC%A5%B7%A5%E7%A5%F3">イノベーション</a>って最近、聞かなくなりましたね。</p> <p>ライブコマースとか、個人的にはイノベーティブだと思いましたけど...。</p> <p>通販番組に勝るほどの影響力はないにしても、購買意欲の増強剤にはなりましたよね。</p> <p> </p> <p>さて、毎年のことですが、今年も2019年版の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%E1%A5%EA">アメリ</a>カのスタートアップを紹介します。</p> <p>ですが、実は、今年から趣向を変えました。</p> <p> </p> <p>このブログでは、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%E1%A5%EA">アメリ</a>カのみを対象としていますが、世界各国のスタートアップを<a href="https://medium.com/@bfSnow" target="_blank">Mediumでまとめ</a>ています(国や都市は明記していません)。</p> <p>このブログでは、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%E1%A5%EA">アメリ</a>カに限り、内容を引用する形を取りました(読みやすさのため、改行の手を加えています)。</p> <p>ただ、数が多いので、紹介したい分を全ては披露できていません。</p> <p>このブログでも順次、追記していく形を取ろうと思います。</p> <p> </p> <p>それでは見ていきましょう。</p> <p> </p> <h2>Airlines Technology</h2> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="Airlines Technology" src="https://hatenablog-parts.com/embed?url=http%3A%2F%2Fwww.airlinestechnology.com%2F" frameborder="0" scrolling="no"></iframe>世の中では、旅行業者に旅行プランを注文すると、航空券やホテル等も手配される。これは旅行業者が一つ一つを予約しているわけではなく、GDS (Global Distribution System) と呼ばれる通信網を組み込んだ予約・発券のコンピュータシステムにより可能となっている。</p> <p>AT社はGDSに代わる新たなシステム—NDC (New Distribution Capability) をベースにITサービスを開発し、航空会社と旅行業者を取り結んでいる。どうやらGDSは、その手数料が航空会社にとって痛手となっており、その代替としてNDCが<a href="https://www.iata.org/Pages/default.aspx" target="_blank">IATA</a>により推し進められているそうだ。</p> <p>※NDCは<a href="http://www.travelvision.jp/tokushu/ndc/" target="_blank">このサイト</a>が詳しい</p> <p>※IATAによるNDCの詳細は<a href="https://www.iata.org/whatwedo/airline-distribution/ndc/Pages/default.aspx" target="_blank">こちら</a></p> <p>当然、不要なコミッションを削減できるNDCへ移っていく航空会社はあるだろうし、それに伴い旅行業者もNDCに対応していく必要がある。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B7%A5%B9%A5%C6%A5%E0%B3%AB%C8%AF">システム開発</a>は、その両者でも可能だが、先行して(両社の開発負担を請け負って)プラットフォームを構築した点が革新的と言えるだろう。</p> <p> </p> <p> </p> <h2>Arise Travel</h2> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="ARISE | Open Travel" src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fwww.arise.travel%2F" frameborder="0" scrolling="no"></iframe><cite class="hatena-citation"><a href="https://www.arise.travel/"> </a></cite>インターネットでのホテルの予約方法は、ホテル所有のWebサイトか、ホテル情報が集約された旅行サイトですることが多い。</p> <p>予約されるホテルの「部屋」に着目すると、その情報は一か所のサーバに保存され、それゆえに近年の情報速度の高速化に対応できず、「部屋」の予約情報でFailureすることがある…。</p> <p>なんて書くと、大げさに思われるかもしれないが、Blockchainを使えば、「部屋」の情報は常に最新に保たれる(その貴重さは、部屋の人気度に比例する)。</p> <p>AT社は<a class="keyword" href="http://d.hatena.ne.jp/keyword/Open%20Access">Open Access</a>可能なネットワークを用意し、GraphQL (Query言語) によりホテルの部屋情報の問い合わせ(接続)を可能にした。</p> <p>※GraphQLの詳細は<a href="https://graphql.org/" target="_blank">こちら</a></p> <p> </p> <p> </p> <h2>Ascape</h2> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="Ascape" src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fascape.com%2F" frameborder="0" scrolling="no"></iframe><a class="keyword" href="http://d.hatena.ne.jp/keyword/VR">VR</a>が手に入れやすくなった世の中、動画エンターテインメントはどのような進化を続けるのだろうか。その一つが360度を見渡せる、没入型デジタル環境の提供だろう。</p> <p>Ascape社は旅行向けサービスの中でそれを実現させた。動画は4Kでも提供され、実体験に近い音も感じられる。サービスはアプリから利用でき、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Google">Google</a>が開催する「Best of 2017 in Japan」にも選ばれた。</p> <p>プレミアム動画への課金でマネタイズする仕組みが整備され、アプリユーザーも<a href="https://ascape.com/submit">申請</a>を経れば、動画投稿が可能。ただし、機材や技術を持たないプロでもない人が360度動画を作成できるかどうかは疑問が残る。そういう意味で、視聴と投稿の両サイドから火が付くような社会現象は起きづらいだろう(ドローン動画が良い例)</p> <p>外出があまり趣味でない人 — 例えば旅行は<a class="keyword" href="http://d.hatena.ne.jp/keyword/Google">Google</a> Mapで良いと意固地になっているような — には、成長が望まれるサービスだろう。街中を<a class="keyword" href="http://d.hatena.ne.jp/keyword/VR">VR</a>で360度見回せたなら、それはそれでリッチな体験だ。</p> <p> </p> <p> </p> <h2>Avisell</h2> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="avisell" src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fwww.avisell.com%2F" frameborder="0" scrolling="no"></iframe><a href="https://www.avisell.com/"> </a>航空券は予約システムの上に成り立っている。フライトが当日でも、航空券で席を確保しなければ、航空機には乗れない。それは、航空機に乗るには席に座ることが必須になっているからだ。</p> <p>航空ビジネスは、チケットではなく座席を売るモデルだからこそ、キャンセルによる空席ができると痛手になり、一方でチェックインカウンターでは最後まで空席の販売(金額を多めに払い座席をランクアップ)がされたりする。</p> <p>座席は満席が望ましく、その状態を作りやすくするサービスを展開しているのがAvisell社だ。</p> <p>Avisell社は航空会社向けのITサービスにより、航空券の再販売や空席の売り尽くしをサポートする。また、天候などによるフライトキャンセル時、大規模な乗客がカウンターへ押し寄せるものだが、同社のサービスではそうした状況もカバーできる。</p> <p>…Private Companyなので、実は紹介がしづらいところ。</p> <p>とはいえ、座席を売るビジネスに着目したのは鋭いポイント。似たようなものには、映画館や遊園地のアト<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E9%A5%AF">ラク</a>ション、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%BB%A5%DF">セミ</a>ナーなどがあり、それらをサポートするサービスは、同時にプラットフォームの役割も果たしていくのだとも思う。</p> <p> </p> <p> </p> <h2>Beyond Pricing</h2> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="Dynamic Pricing Tool for Airbnb &amp; VRBO | Beyond Pricing" src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fbeyondpricing.com" frameborder="0" scrolling="no"></iframe>シェアリングエコノミーのパ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A4%A5%AA%A5%CB%A5%A2">イオニア</a>たちが受ける<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%E8%B9%D4%BC%D4">先行者</a>利益は、プラットフォームに参入する企業が生み出すサービスの管理者になれることだ。</p> <p>また、参入者にとっては、構築された環境をどれだけ早く攻略するかが求められる(例えば、仕様や規則の変更への対応)。これは、プラットフォーム内における<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%E8%B9%D4%BC%D4">先行者</a>利益につながる。</p> <p>ホームシェアリングで有名な<a class="keyword" href="http://d.hatena.ne.jp/keyword/Airbnb">Airbnb</a>を活用し、サービスを展開しているBP社は、データに基づいたプライシングを<a class="keyword" href="http://d.hatena.ne.jp/keyword/SaaS">SaaS</a>として提供している。対象は<a class="keyword" href="http://d.hatena.ne.jp/keyword/Airbnb">Airbnb</a>だけでなく、Vacation Rentals(休暇用の家具付き部屋)も含まれ、世界各国の主要都市にあるホームが対象だ。</p> <p>プライシングは自動化(<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B5%A1%B3%A3%B3%D8%BD%AC">機械学習</a>)されており、価格算出の材料は、「曜日・季節・地域イベント」を主要な変数としている。また、毎日にわたるマーケットのリアルタイム分析もコアな技術。</p> <p><a href="https://beyondpricing.com/preview/demo" target="_blank">デモページ</a>を見れば分かるように、価格構成が明示化されている点が、サービス利用の敷居を下げている(不動産の値付けは素人判断には難しい)。</p> <p>どれだけオープンにできるかは、その企業の底力につながっている。なぜなら、模倣されることより、信頼されることを選択した勇気がそこにはあるからだ。</p> <p> </p> <p> </p> <h2>Biomaker Labs</h2> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="Biomarker Labs" src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fwww.biomarker.io" frameborder="0" scrolling="no"></iframe>一般的に、人間は人生の1/3を睡眠に費やしていると言われる。様々なアプリを使い、人間は自らの健康をコン<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C8%A5%ED%A1%BC%A5%EB">トロール</a>しようとし、睡眠ももれなくその対象となっている(<a href="https://itunes.apple.com/us/app/biomarker-better-sleep/id1424932470?mt=8&amp;amp;utm_medium=header&amp;amp;utm_source=Website" target="_blank">3.7兆ドルもの市場ができあがっている</a>そうだ)。</p> <p>BL社の提供するアプリは、<a href="https://itunes.apple.com/us/app/biomarker-better-sleep/id1424932470?mt=8&amp;amp;utm_medium=cta&amp;amp;utm_source=Website" target="_blank">睡眠に特化</a>しており、ユーザーが使用する寝具やサプリ、医薬品、生活習慣などがどれだけ睡眠の質に貢献しているかを測定する。</p> <p>睡眠時間は<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A6%A5%A7%A5%A2%A5%E9%A5%D6%A5%EB">ウェアラブル</a>端末で記録され、アプリ内で貢献度を測りたい対象を登録、睡眠に関するアンケートに答える。それにより、対象がもたらす睡眠時間や質への影響が分かる。</p> <p>BL社は、他にもダイエット、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B5%A5%D7%A5%EA%A5%E1%A5%F3%A5%C8">サプリメント</a>、身体ト<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EC%A1%BC%A5%CB%A5%F3">レーニン</a>グなども効果測定している。</p> <p>ユーザーはデータによる分析結果から健康と向き合うことができる。この点が、医者をはじめとした専門家からのアド<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D0%A5%A4%A5%B9">バイス</a>のみを頼りにする日本人への、健康意識の改革につながると思い、まとめに加えた。</p> <p> </p> <p> </p> <h2>Biome Makers</h2> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="Home - Biome Makers" src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fbiomemakers.com" frameborder="0" scrolling="no"></iframe>Microbiome(マイクロバイオーム)という単語がある。微生物の集まり、あるいはゲノムや遺伝子の集合をいう。それは、例えば人体の腸や、土壌といった分野で研究が進んでいる。</p> <p>BM社はその技術により、持続可能な農業をコンセプトとしたビジネスを展開する。<a href="https://wineseq.com/" target="_blank">WineSeq</a>は同社が始めたプロダクトの一つで、土、苗、発酵菌などをオンラインショップで販売している。</p> <p>ユーザーが持つブドウ園の質を測定し、マイクロバイオームによる効果を試算する。種苗はDNAシークエンシング(遺伝情報解析の一手法)と<a class="keyword" href="http://d.hatena.ne.jp/keyword/%BF%CD%B9%A9%C3%CE%C7%BD">人工知能</a>により、複雑な<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C8%F9%C0%B8%CA%AA%B3%D8">微生物学</a>上のデータが計算される。現在は、3000種以上がデータベースに登録されており、ユーザー数は900、18ヵ国の地域で広まっている。</p> <p>BM社のサービスを利用すれば、同社のマイクロバイオームのコミュニティに入れる。サステイナビリティという一つの考え方に魅力を感じる層がいる。そのマーケットにあるポテンシャルへの期待を込めて取り上げた。</p> <p> </p> <p> </p> <h2>Butler Hospitality</h2> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="Butler" src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fwww.butlerhospitality.com" frameborder="0" scrolling="no"></iframe>旅行でも出張でも、ホテルの宿泊は特別なものだ。ルームサービスを頼めばいつもと違う時間を過ごせ、アメニティは普段と異なる生活を感じさせる。</p> <p>しかし、そういった特別さは、ホテルにとって割高な出費となっている。高い人件費のわりに、注文数が少ないからだ。</p> <p>そうした問題に着目したBH社は、ホテルオーナーに対し、食べ物(ルームサービスやケータリング)、アメニティの提供を行っている。注文するのは宿泊者で、電話、テキストメッセージ、Webから可能。また、支払いは宿泊請求書に付せられるなど、ストレスフリーとなっている。</p> <p>BH社はニューヨークを拠点としているため、サービスも同エリアが中心となっている。日本へはまだ進出していない。日本で考えれば、例えばホテル女子会は進出しやすい分野になる。ホテル側が作る「ルームサービス特別プラン」みたいなものを考えてみても良い。</p> <p> </p> <p> </p> <div style="text-align: center;"> <p>ー☆ー★ー☆ー★ー☆ー★ー☆ー★ー☆ー★ー☆ー★ー☆ー★ー☆ー★ー</p> <p><span style="text-decoration: line-through;">今回はここまで(2019/1/12)</span></p> <p><span style="text-decoration: line-through;">まだ1/3です。</span></p> <p>更新しました(2019/1/13)</p> <p>ー☆ー★ー☆ー★ー☆ー★ー☆ー★ー☆ー★ー☆ー★ー☆ー★ー☆ー★ー</p> </div> <p> </p> <p> </p> <h2>FairFly</h2> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="FairFly: Cutting business travel costs, automatically." src="https://hatenablog-parts.com/embed?url=http%3A%2F%2Fwww.fairfly.com%2F" frameborder="0" scrolling="no"></iframe>ビジネスにおける出張費の内訳で、大部分を占めるのが交通費だ。中でも、航空機を利用した移動は、費用負担が重い。</p> <p>FairFly社は、航空状況と予約情報をモニタリングし、安価のフライトを入手可能にするシステムを提供している。</p> <p>特筆すべき点は、ただ安いものをサーチするだけではなく、他のフライトと比較し、より良質なもの(グレード、サービス等)もシステム側から提供できることだ。</p> <p>それらを実現可能にしているのが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D3%A5%C3%A5%B0%A5%C7%A1%BC%A5%BF">ビッグデータ</a>の処理。</p> <p>フライト全体を分析した結果、同社ではその中から18%が節約できるものとし、かつユーザーは平均して411ドルの費用を抑えることができるという。</p> <p>このシステムは、一般企業への提供だけでなく、TMC(Travel Management Companu: 旅行管理会社)も対象に含まれている。つまり、「安価なフライト、より良質なフライト」といった宣伝文句で、既存企業にはないフライトチケット発券代理業を始められる。</p> <p> </p> <p> </p> <h2>Gladly</h2> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="Gladly - Customer Service Reinvented" src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fwww.gladly.com%2F" frameborder="0" scrolling="no"></iframe>小売・サービス業の変化が著しい昨今、それは接客の中にも表れている。日本にも非対面式の接客モデル(例えばチャットサービス)は既出だ。</p> <p>Gladly社を取り上げる理由は、チャットの中にある多様なサービスにある。</p> <p>チャットでありふれているのは、テキストでのやり取りだ。それは、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E1%A5%C3%A5%BB%A5%F3%A5%B8%A5%E3%A1%BC">メッセンジャー</a>アプリと同等の仕様になっている。Gladly社はそれに加え、チャット上に音声を残すことができ、メッセージはSMS、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%BD%A1%BC%A5%B7%A5%E3%A5%EB%A5%E1%A5%C7%A5%A3%A5%A2">ソーシャルメディア</a>、emailから接続が可能となっている。そうしたサービスへの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CE%AE%C6%FE">流入</a>経路の豊富さは、ユーザーの行動を制限しない。</p> <p>Gladly社では、<a href="https://www.gladly.com/wp-content/uploads/2018/11/FINAL-JetBlue_Case_Study.pdf?x77042&amp;hsCtaTracking=24323445-e05c-4897-a1da-f4545e31f7b9|eb3017f0-b4db-4dbc-89f3-378537eebe0e" target="_blank">アメリカの格安航空会社JetBlueへの導入に成功</a>し、<a class="keyword" href="http://d.hatena.ne.jp/keyword/JetBlue">JetBlue</a>社はチャットでのやり取りを通して、チャットを利用した顧客のディープな情報を手にした。</p> <p>非対面式の利点は、時間にとらわれない接客が可能という点で、つまりは接客時間以上に顧客に接することもできる。</p> <p> </p> <p> </p> <h2>ICM Hub</h2> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="The intelligent support bot for Airlines" src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fwww.icmhub.com%2F" frameborder="0" scrolling="no"></iframe>日本でのチャットボット元年が2016年と言われている。この業界の進化は早く、応対の役割に人ではなくチャットボットを選ぶ企業も多い。</p> <p>多様なチャットボットがある中で、ICM Hub社が開発したのが、航空向けのソリューション。同社のチャットでは、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A4%A5%F3%A5%BF%A5%E9%A5%AF%A5%C6%A5%A3%A5%D6">インタラクティブ</a>な会話を通して、航空券の手配を行える(マイル登録なども含め)。</p> <p>チャットボットの一つの課題が、あたかも人間とやり取りをしているようにユーザーを錯覚させられるかどうかだ。同社のボットはその点に注力しており、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B5%A1%B3%A3%B3%D8%BD%AC">機械学習</a>も備わっているため、ユーザーとのやり取りを通して成長していく。</p> <p>この会社だけではないが、一例として、生身の人間の代替として注目されるボットの活躍する場をフォーカスした。</p> <p> </p> <p> </p> <h2>ImpactVision</h2> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="ImpactVision | Real Time Food Quality Decisions" src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fwww.impactvi.com%2F" frameborder="0" scrolling="no"></iframe>健康意識の高まりは、食生活の見直しからも始まっている。食の安全はいまや基本的な懸念事項として認知されているほどだ。</p> <p>IV社のプロダクトはHyperspectral Imaging(ハイパースペクトラル・イメージング:分光学を用いたデジタル画像処理)の技術を使用したものだ。対象の食品に特別な光を照射し、食品が持つ水分や柔らかさなどをデータ化した後、食品の特徴を分析する。</p> <p>例えば、食品の出荷ラインにイメージングデ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D0%A5%A4%A5%B9">バイス</a>を設置し、出荷可否を人の目でなく、データに基づき判断できる。それは、人の目よりも正確な判断を可能とする。</p> <p>現在は、食品に付いている異物の検出、アボカドの乾き具合の検査に対応しており、魚類の鮮度検査を開発中。</p> <p>IV社のようなプロダクトが、食品出荷前の基準に求められれば、食品販売の付加価値につながる。</p> <p> </p> <p> </p> <h2>Journy</h2> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="Journy | We Plan Your Perfect Trip" src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fwww.gojourny.com%2F" frameborder="0" scrolling="no"></iframe>旅行に行く気はあるが、十分なプランを立てるのはなかなか難しいものだ。特に、普段から旅行に行く人でないなら、なおさらそれは旅行を遠ざける要因にもなる。</p> <p>そんな悩みを払拭するサービスを提供しているのがJourny社。Journy社では、ユーザーが旅行の行き先を設定後、したいこと、見たいもの、食べたいものの質問に答えるだけで、一通りのプランを作成してくれる。</p> <p>プラン作成に携わるのは、シェフや(旅先の)ローカル・エキスパートといった同社が持つネットワークにいる人々。サービスは、プランのみの提供から、レストランやホテルの予約なども含めたフルサービスもある。</p> <p>旅行先は様々で、日本、イタリア、スペイン、台湾、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AE%A5%EA%A5%B7%A5%E3">ギリシャ</a>、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AA%A1%BC%A5%B9%A5%C8%A5%EA%A5%A2">オーストリア</a>など。同社のWebサイトで日本プッシュをしている感じがあって、旅行先としての日本の価値を思った。</p> <p>日本は、国内旅行も賑わっている。似たようなサービスがあると、旅行業者とも差別化できているため、なかなか面白いのでは?</p> <p> </p> <p> </p> <h2>Lumo</h2> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="Home" src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fthinklumo.com%2F" frameborder="0" scrolling="no"></iframe>航空機の遅延による損額は年間600億ドルに上るそうだ。その金額の裏付けは、オペレーションコストや生産性の損失によるらしく、Lumo社では、そうした影響を最小限に抑えるサービスを提供している。</p> <p>サービスは<a href="https://thinklumo.com/lumo-app/" target="_blank">アプリ</a>から利用可能で、ユーザーが希望のフライトを検索すると、アプリはその情報を追跡し続ける。年間48ドルの有料プランで、3ヶ月後までのフライト遅延予測を見ることができ(無料版は3時間先まで)、他のフライトとの比較サービスも使える。</p> <p>また、Webからも<a href="https://thinklumo.com/lumo-navigator/" target="_blank">サービス</a>へアクセスできるほか、開発者向けに<a href="https://thinklumo.com/lumo-api/" target="_blank">APIも用意</a>されている(申請が必要)。</p> <p>ちなみに、遅延状況の解析は<a href="https://thinklumo.com/flight-delay-map/" target="_blank">同社のWebサイト</a>から見られる。</p> <p>将来予測は市場開拓が進められているコンテンツで、様々な分野で導入の余地がある。その分、参入の敷居とユーザーからの期待値は高いのだが…。</p> <p> </p> <p> </p> <h2>Redeam</h2> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="Redeam" src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fwww.redeam.com%2F" frameborder="0" scrolling="no"></iframe>購買証明書とも言えるチケットを存分に活用する余地はまだある。ITを用いれば、発券プロセスの簡素化や売上分析を行うことができ、さらには提供するサービスを見つめ直す機会や、その材料も手に入れることができる。</p> <p>Redeam社は、チケットをスキャンする独自のデ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D0%A5%A4%A5%B9">バイス</a>やシステムを開発した。それにより、日ごとや月ごとのチケット発券状況を数値化・<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B8%AB%A4%A8%A4%EB%B2%BD">見える化</a>し、顧客分析の材料をユーザーへもたらす。また、チケット発行や予約システムのソリューションでは、リアルタイムな売上分析を可能。これらのシステムは、空港の航空券も対象としている。</p> <p>平たく言えば、プラットフォームビジネスだ。</p> <p>チケット発券システムの分野でそれは真新しくはないものの、いまだ紙のチケットで事業を行っている小売・飲食店などは多い。ただ、サービスの魅力さは分かるが、概してこういうものは導入コストが課題となるものだ。</p> <p>電子決済が日本でも流行りつつあるが、大金を餌にして広報することが正しかったのだろうか。</p> <p>Redeam社とは形が異なるが、チケット処理システムを先行して広めた後、電子決済も同じサービス内に導入していく流れの方が、太い顧客を入手できたように思う(例えば、ミュージシャンのライブやフェス、アイドルのイベントに参加する層など)。結局は、現金やカード払いとの市場競争になるのだから、チケット処理を通じて、あらかじめ電子決済の便利さを体験させる方が有益だったはずだ。</p> <p> </p> <p> </p> <h2>Ripe.io</h2> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="Ripe – Let's Talk About the Quality of our Food" src="https://hatenablog-parts.com/embed?url=http%3A%2F%2Fwww.ripe.io%2F" frameborder="0" scrolling="no"></iframe>Ripe社を調べ始めた時、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D6%A5%ED%A5%C3%A5%AF%A5%C1%A5%A7%A1%BC%A5%F3">ブロックチェーン</a>やIoTと食べ物が、なぜつながるのかよく分からなかった。だが、順を追って理解していけば、同社のサービスが食の安全にこだわったものだと把握できる。</p> <p>スーパーマーケットの青果コーナーに行けば、生産者の顔写真が載せられた野菜がよくあるものだ。そこには生産地やこだわりなども併記されている。そうした食物に関する情報を、Ripe社はデジタル化し、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D6%A5%ED%A5%C3%A5%AF%A5%C1%A5%A7%A1%BC%A5%F3">ブロックチェーン</a>技術によって複製不可能な形にする。</p> <p>食物はIoT化されたファームで育ち、収穫後の配送中も店舗に陳列されるまでト<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E9%A5%C3%A5%AD%A5%F3%A5%B0">ラッキング</a>される。そうした情報が集積された食物を、顧客は購入し、購入物の生産過程を知ることができる。</p> <p>口にする食べ物が二つとないものであることを証明するために、繰り返しになるが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D6%A5%ED%A5%C3%A5%AF%A5%C1%A5%A7%A1%BC%A5%F3">ブロックチェーン</a>の暗号技術で偽造防止が可能となっている。これは、食べ物のプライオリティも生み出している。</p> <p>日本の農業は様々な障壁があり、まずIoT化すら難しいだろう。だが、偽造防止に着目すれば、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D6%A5%ED%A5%C3%A5%AF%A5%C1%A5%A7%A1%BC%A5%F3">ブロックチェーン</a>技術を活用できるシーンは多い。例えば、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AA%A1%BC%A5%C8%A5%AF%A5%C1%A5%E5%A1%BC%A5%EB">オートクチュール</a>も、唯一のものだからこそ価値があり、その製造工程は情報化しても良い。</p> <p> </p> <p> </p> <div style="text-align: center;"> <p>ー☆ー★ー☆ー★ー☆ー★ー☆ー★ー☆ー★ー☆ー★ー☆ー★ー☆ー★ー</p> <p><span style="text-decoration: line-through;">今回はここまで(2019/1/13)</span></p> <p>ようやく2/3です。</p> <p>更新しました(2019/1/27)</p> <p>ー☆ー★ー☆ー★ー☆ー★ー☆ー★ー☆ー★ー☆ー★ー☆ー★ー☆ー★ー</p> </div> <p> </p> <p> </p> <h2>Shep</h2> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="Home" src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fsheptravel.com%2F" frameborder="0" scrolling="no"></iframe>TMC(Travel Management Company: 旅行管理会社)向けのサービス、と知った時はニッチなものだと感じたが、TMCはそんなに少ないものでもない。日本だと「旅行業務取扱管理者」の資格を有する者がいれば、旅行代理店を開くのはそんなに難しくない。<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C6%FC%CB%DC%CE%B9%B9%D4">日本旅行</a>業協会の調べでは、<a href="https://www.jata-net.or.jp/data/stats/2018/12.html" target="_blank">2017年は9,551の業者が存在した</a>。</p> <p>旅行会社は顧客のフライトやホテルなどを手配し、その手数料を収益とするモデルだ。それゆえに、手配の時間が短ければ短いほど、一人の顧客にかける時間は減り、回転率は高まる。</p> <p>前置きが長くなったが、Shep社のサービスはフライトとホテルの予約情報をト<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E9%A5%C3%A5%AD%A5%F3%A5%B0">ラッキング</a>するもので、ト<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E9%A5%C3%A5%AD%A5%F3%A5%B0">ラッキング</a>先はコンシューマーサイトを対象としている。</p> <p>Shep社のサービスの画期的な点は、コンシューマーサイトの不透明な部分、あるいはユーザーのコン<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C8%A5%ED%A1%BC%A5%EB">トロール</a>できない部分に切り込み、予約情報をト<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E9%A5%C3%A5%AD%A5%F3%A5%B0">ラッキング</a>することでデータを収集し、自社サービスのユーザーへ便利な形に成形し直して提供している点にある。</p> <p> </p> <p> </p> <h2>Shippo</h2> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="The Best Multi-carrier Shipping Software for E-commerce | Shippo" src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fgoshippo.com%2F" frameborder="0" scrolling="no"></iframe>副業が活発になる時代が来れば、インターネットを使用して小売りを営む人は、配達プロセスの課題に直面するはずだ。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%BE%A6%CE%AE">商流</a>と物流はビジネスの基本だが、ビジネスを考える時、利益を獲得する<a class="keyword" href="http://d.hatena.ne.jp/keyword/%BE%A6%CE%AE">商流</a>に夢中になる人は多いが、物流はおざなりにされることがある。物流を攻略すれば、そのビジネスはかなりスマートなものに変わるのに。</p> <p>その点に着目したスタートアップは少なくはなく、Shippo社もその一つ。Shippo社は、<a class="keyword" href="http://d.hatena.ne.jp/keyword/USPS">USPS</a>(<a class="keyword" href="http://d.hatena.ne.jp/keyword/UPS">UPS</a>ではない)やDHLなどの物流会社(キャリア)を利用した発送手続きをシンプルにし、かつユーザーのコストダウンを実現した。</p> <p>サービスは<a href="https://goshippo.com/products/web-app-api/" target="_blank">WebサービスやAPI</a>から利用でき、ユーザーは発送したい荷物を登録し、キャリアを選定、発送票を作成後、キャリアに預ける。ユーザーは発送した荷物を<a class="keyword" href="http://d.hatena.ne.jp/keyword/Web%A5%B5%A1%BC%A5%D3%A5%B9">Webサービス</a>(もしくは<a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a>を使用して開発したオウンドシステム)上で一元管理でき、ト<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E9%A5%C3%A5%AD%A5%F3%A5%B0">ラッキング</a>や発送メールが送られるよう発送票もカスタマイズできる。</p> <p>このサービスは、<a href="https://goshippo.com/case-studies/mercari/" target="_blank">メルカリのアメリカ進出にも利用されている</a>。上述したように、インターネット小売りをしている個人もそうだが、そういった人たち向けに物流システムを構築するニーズもありそうだ。</p> <p> </p> <p> </p> <h2>SkyHi</h2> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="SkyHi - the travel club for everyone" src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fflyskyhi.com%2F" frameborder="0" scrolling="no"></iframe>航空券の月額制は初めて知った。SkyHi社のサービスはユニークだ。</p> <p>月額199ドルでSkyHiのクラブに入会すると、1000マイル35ドルで航空券が手に入る。2000マイルで75ドル、3000マイルでいつでも120ドルだ。1ヶ月に利用できる航路は5つと限りがあり、ロケーションも北<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%E1%A5%EA">アメリ</a>カとヨーロッパと広範囲ではない。予約は10日間以内のフライトが対象となる。</p> <p>日本も日本人による国内旅行が活況だ。SkyHi社のサービスを日本に取り込めば、なかなか面白い。</p> <p> </p> <p> </p> <h2>Sleepbox</h2> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="Sleepbox | Your Smart-Micro Hotel Where You Need it the Most." src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fsleepbox.com%2F" frameborder="0" scrolling="no"></iframe>Sleepbox社の提供するサービスは、日本で定着化したカプセルホテルと一見して変わらない。日本のカプセルホテルは外国人にとっては斬新なものだったが、それが少しスタイリッシュになった感じか。</p> <p>Sleepbox <a class="keyword" href="http://d.hatena.ne.jp/keyword/Hotel">Hotel</a>は空港に配置されており、利用の予約は<a href="https://play.google.com/store/apps/details?id=com.sleepboxclient&amp;hl=en" target="_blank">アプリ</a>から可能だ。宿泊時には、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%DE%A5%DB">スマホ</a>など電化製品の充電、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Wifi">Wifi</a>接続、作業スペースのデスクが設けられている。映画や音楽も視聴でき、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Bluetooth">Bluetooth</a>スピーカーや照明などにもこだわり、ラグジュアリーに仕上げている。</p> <p>日本に逆輸入されているものがある中で、カプセルホテルもその対象になるのではないか。逆輸入の仕組みは、海外からの輸入というだけで付加価値がある。</p> <p> </p> <p> </p> <p> </p> <p> </p> <p>今回のスタートアップ紹介記事は、以上になります。</p> <p>全体的な総括はMediumに書きましたので、<a href="https://medium.com/@bfSnow/2019%E5%B9%B4-%E6%B5%B7%E5%A4%96%E3%81%AE%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%88%E3%82%A2%E3%83%83%E3%83%97%E3%81%AB%E5%AD%A6%E3%81%B6%E3%83%93%E3%82%B8%E3%83%8D%E3%82%B9%E3%83%A2%E3%83%87%E3%83%AB-part-3-3-2ce919da2242" target="_blank">Part3の最後</a>をお読みください。</p> <p> </p> <p>例年にも増して、記事が多くなったなあ。</p> <p> </p> <p> </p> <p>Mediumに書いたまとめはこちらから。</p> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="【2019年】海外のスタートアップに学ぶビジネスモデル Part: 1/3 – Yuki – Medium" src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fmedium.com%2F%40bfSnow%2Flearn-startup-businessmodel-2019-part1-3fef8b75c63a" frameborder="0" scrolling="no"></iframe><cite class="hatena-citation"></cite></p> <p> </p> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="【2019年】海外のスタートアップに学ぶビジネスモデル Part: 2/3 – Yuki – Medium" src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fmedium.com%2F%40bfSnow%2F2019%25E5%25B9%25B4-%25E6%25B5%25B7%25E5%25A4%2596%25E3%2581%25AE%25E3%2582%25B9%25E3%2582%25BF%25E3%2583%25BC%25E3%2583%2588%25E3%2582%25A2%25E3%2583%2583%25E3%2583%2597%25E3%2581%25AB%25E5%25AD%25A6%25E3%2581%25B6%25E3%2583%2593%25E3%2582%25B8%25E3%2583%258D%25E3%2582%25B9%25E3%2583%25A2%25E3%2583%2587%25E3%2583%25AB-part-2-3-e822fb45f60e" frameborder="0" scrolling="no"></iframe></p> <p> </p> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="【2019年】海外のスタートアップに学ぶビジネスモデル Part: 3/3 – Yuki – Medium" src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fmedium.com%2F%40bfSnow%2F2019%25E5%25B9%25B4-%25E6%25B5%25B7%25E5%25A4%2596%25E3%2581%25AE%25E3%2582%25B9%25E3%2582%25BF%25E3%2583%25BC%25E3%2583%2588%25E3%2582%25A2%25E3%2583%2583%25E3%2583%2597%25E3%2581%25AB%25E5%25AD%25A6%25E3%2581%25B6%25E3%2583%2593%25E3%2582%25B8%25E3%2583%258D%25E3%2582%25B9%25E3%2583%25A2%25E3%2583%2587%25E3%2583%25AB-part-3-3-2ce919da2242" frameborder="0" scrolling="no"></iframe></p> <p> </p> <p> </p> <p>以上。</p> <p> </p> <p> </p> yuki_sasano 【Powershell】Excelのセル内で改行された文字群を一つずつのセルに置き直す方法。 hatenablog://entry/10257846132684021883 2018-12-12T21:20:22+09:00 2018-12-15T17:36:04+09:00 Powershellを使ってExcelも使う。 はろー、yukiです。 Excelのセル内で改行して情報を集約する方法。Alt+Enterでできますよね。 便利ではあるんですが、例えばこういうことが起きます。 セルの間で同じ値が発生し、重複している文字列をカウントしたい場合。 この状態で下の関数を使用してもうまくいきません。 =COUNTIF(B2:B4, "a") ということで、今回のタスクはこちら。 ーーーーーーーーーーーーーーーーーーーーーーーーー セル内で改行された文字群から、一行ずつの文字列に成形 文字列を一つずつのセルに置き直す ーーーーーーーーーーーーーーーーーーーーーーーーー … <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Powershell">Powershell</a>を使って<a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a>も使う。</p> <p> </p> <p>はろー、<a class="keyword" href="http://d.hatena.ne.jp/keyword/yuki">yuki</a>です。</p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a>のセル内で改行して情報を集約する方法。Alt+Enterでできますよね。</p> <p> </p> <p>便利ではあるんですが、例えばこういうことが起きます。</p> <p><img class="hatena-fotolife" title="f:id:yuki_sasano:20181212210108p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/y/yuki_sasano/20181212/20181212210108.png" alt="f:id:yuki_sasano:20181212210108p:plain" /></p> <p>セルの間で同じ値が発生し、重複している文字列をカウントしたい場合。</p> <p>この状態で下の関数を使用してもうまくいきません。</p> <pre>=COUNTIF(B2:B4, "a")</pre> <p> </p> <p>ということで、今回のタスクはこちら。</p> <p>ーーーーーーーーーーーーーーーーーーーーーーーーー</p> <ol> <li>セル内で改行された文字群から、一行ずつの文字列に成形</li> <li>文字列を一つずつのセルに置き直す</li> </ol> <p>ーーーーーーーーーーーーーーーーーーーーーーーーー</p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a>でやろうとすると、[データ]タブの[区切り位置]から、文字ごとに区切ることが可能です。</p> <p>ですが、張り付けると列(横)に広がってしまうので、行/列の入れ替えで張り付けます。</p> <p>...ということをすると、できることはできますが、数が多いと大変ですよね。</p> <p> </p> <script async="" src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <p><ins class="adsbygoogle" style="display: block;" data-ad-client="ca-pub-3087197401719727" data-ad-slot="1110573053" data-ad-format="auto" data-full-width-responsive="true"> </ins></p> <script>// <![CDATA[ (adsbygoogle = window.adsbygoogle || []).push({}); // ]]></script> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows">Windows</a>系のPCであれば、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Powershell">Powershell</a>を使用しましょう。</p> <p>手順はこちら(<strong><span style="text-decoration: underline;">太字下線の文字を追えば、すぐにできます</span></strong>)。</p> <p> </p> <p><span style="text-decoration: underline;"><strong><a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a>上で対象範囲をコピーし、テキストファイルに張り付け、任意の名前で保存し、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Powershell">Powershell</a>で読込み。</strong></span></p> <p>それをしたのがこちら。</p> <p> </p> <pre>&gt; cat .\test.txt "a b" "a a a" c</pre> <p>おっと、「"」を消すのを忘れていました。</p> <p>テキストファイルに戻り、<strong><span style="text-decoration: underline;">[置き換え]から「"」を全て消して</span></strong>ください。</p> <p> </p> <pre>&gt; cat .\test.txt a b a a a c</pre> <p>はい。うまくいきましたね。</p> <p>あとは簡単です。<strong><span style="text-decoration: underline;"><a class="keyword" href="http://d.hatena.ne.jp/keyword/Powershell">Powershell</a>で対象部分をコピーし、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Excel">Excel</a>へ貼り付け</span></strong>ます。</p> <p><img class="hatena-fotolife" title="f:id:yuki_sasano:20181212211025p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/y/yuki_sasano/20181212/20181212211025.png" alt="f:id:yuki_sasano:20181212211025p:plain" /></p> <p>上図のようになりましたね。</p> <p>この状態であれば、COUNTIF文も使用できます。 </p> <p> </p> <script async="" src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <p><ins class="adsbygoogle" style="display: block;" data-ad-client="ca-pub-3087197401719727" data-ad-slot="1110573053" data-ad-format="auto" data-full-width-responsive="true"> </ins></p> <script>// <![CDATA[ (adsbygoogle = window.adsbygoogle || []).push({}); // ]]></script> <p> </p> <p>実は、今回のやり方は、けっこう手抜きです。分かりますよね(笑)。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/vba">vba</a>を使用すれば、今回の例よりもさらに多くのセルに対し、対応できます。</p> <p> </p> <p>平日ということもありますので、ちょっと勘弁してください。</p> <p> </p> <p> </p> <p>以上。</p> <p> </p> <p> </p> yuki_sasano 【Powershell】ディレクトリ内にあるファイル名をテキスト出力する。 hatenablog://entry/10257846132682195859 2018-12-08T21:06:21+09:00 2018-12-08T21:06:21+09:00 ファイルが10個くらいあると、もうコマンド使いたい。 はろー、yukiです。 ディレクトリ内にあるファイル名の一覧を作成することって、たまにあると思います。 例えば、部署ごとに作成したディレクトリ内にある、個人ごとの記録表とかを、提出の有無を把握するため、期間ごとに表を作成し、管理したりなど。 あるいは、開発中のあるソフトウェアの構成で、各ファイルが意味する概要をまとめたり。 そのファイルを選択し、名前をコピーし、テキストファイルに張り付け...。 まあ、メンドクサイ。 Windows系のPCであれば、Powershellを使って、あっという間に完了します。 ということで、今回のタスクはこちら… <p>ファイルが10個くらいあると、もうコマンド使いたい。</p> <p> </p> <p>はろー、<a class="keyword" href="http://d.hatena.ne.jp/keyword/yuki">yuki</a>です。</p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リ内にあるファイル名の一覧を作成することって、たまにあると思います。</p> <p> </p> <p>例えば、部署ごとに作成した<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リ内にある、個人ごとの記録表とかを、提出の有無を把握するため、期間ごとに表を作成し、管理したりなど。</p> <p>あるいは、開発中のあるソフトウェアの構成で、各ファイルが意味する概要をまとめたり。</p> <p> </p> <p>そのファイルを選択し、名前をコピーし、テキストファイルに張り付け...。</p> <p> </p> <p>まあ、メンドクサイ。</p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows">Windows</a>系のPCであれば、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Powershell">Powershell</a>を使って、あっという間に完了します。</p> <p>ということで、今回のタスクはこちら。</p> <p>ーーーーーーーーーーーーーーー</p> <ol> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リ内にあるファイルを出力</li> <li>出力した内容をテキストファイルに書き込み</li> </ol> <p>ーーーーーーーーーーーーーーー</p> <p>項目を1と2に分けましたが、コマンドは1行で済みます。</p> <p>すぐに使いたい方は、下記をコピーしてどうぞ。</p> <p> </p> <pre>ls -name &gt; list.txt</pre> <p> </p> <script async="" src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <p><ins class="adsbygoogle" style="display: block;" data-ad-client="ca-pub-3087197401719727" data-ad-slot="8835819497" data-ad-format="auto" data-full-width-responsive="true"> </ins></p> <script>// <![CDATA[ (adsbygoogle = window.adsbygoogle || []).push({}); // ]]></script> <p> </p> <p>それでは、補足説明をしておきます。</p> <p> </p> <p>まず、該当の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リに移動してください。</p> <p>一番簡単な方法は、リストを作成したいフォルダを開き、パスをコピーして、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Powershell">Powershell</a>で次のようにコマンドを作成。</p> <pre>cd [行先]</pre> <p>もっとも基本的なコマンドなので、説明は不要ですよね。</p> <p>実行する前には、ちゃんと[行先]が正しいか確認してください。</p> <p>絶対参照を使えば、間違えることはないので、コピーが安心です。</p> <p> </p> <p> </p> <p>次に、ファイル一覧の表示。</p> <pre>ls -name</pre> <p>一覧表示のlsコマンドに、nameプロパティを指定することで、nameのみを抽出します。</p> <p> </p> <p>その後に、表示された内容をコピーし、テキストファイルに自分で張り付けても良いです。</p> <p>でも、それだと手間なので、ファイルへ出力。</p> <pre> &gt; list.txt</pre> <p>&gt;はリダイレクトの意味です。ファイル名は任意で、ただし拡張子は.txtですね。</p> <p> </p> <script async="" src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <p><ins class="adsbygoogle" style="display: block;" data-ad-client="ca-pub-3087197401719727" data-ad-slot="8835819497" data-ad-format="auto" data-full-width-responsive="true"> </ins></p> <script>// <![CDATA[ (adsbygoogle = window.adsbygoogle || []).push({}); // ]]></script> <p> </p> <p>さてさて、内容はいかがでしたか?</p> <p>(けっこう簡単なので、内容が短くなってしまいました)</p> <p>現代はパソコンでの仕事が当然なので、少しでも使いこなせるようになりたいですね。</p> <p> </p> <p>ちなみに、今回はファイル名という表現を使っていますが、フォルダでもできます。</p> <p>ですので、簡単な構成管理も作れてしまうわけですよね。</p> <p> </p> <p> </p> <p>以上。</p> <p> </p> <p> </p> yuki_sasano 【DiDi Taxi】日本のスタートアップに学ぶビジネスモデル【BMC】 hatenablog://entry/10257846132612448300 2018-08-19T19:18:54+09:00 2018-08-19T19:22:15+09:00 Softbankの仕事ぶりがすごいなと思いつつ。 はろー、yukiです。 ビジネスに興味のある方なら、ライドシェアリングは聞いたことがあるでしょう。 自分の車に他人を乗せてお金を稼ぐというモデルです。 もっとも有名なのがUberですね。 ただ、このモデルは日本でそれほど流行っていません。 理由は、「(1) タクシー会社からの反発」、「(2) いわゆる“白タク”の法律の壁」があります。 (1)は価格破壊、顧客争奪のため。 (2)は個人タクシーになるには届け出・許可が必要だからです。 Uberのモデルは、個人タクシーの活用が中心みたいですが、実際は「配車の管理」にあります。 タクシーを管理し、利用… <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Softbank">Softbank</a>の仕事ぶりがすごいなと思いつつ。</p> <p> </p> <p>はろー、<a class="keyword" href="http://d.hatena.ne.jp/keyword/yuki">yuki</a>です。</p> <p> </p> <p>ビジネスに興味のある方なら、ライドシェアリングは聞いたことがあるでしょう。</p> <p>自分の車に他人を乗せてお金を稼ぐというモデルです。</p> <p>もっとも有名なのが<a href="https://www.uber.com/ja-JP/" target="_blank">Uber</a>ですね。</p> <p> </p> <p>ただ、このモデルは日本でそれほど流行っていません。</p> <p>理由は、「(1) タクシー会社からの反発」、「(2) いわゆる“白タク”の法律の壁」があります。</p> <p>(1)は価格破壊、顧客争奪のため。</p> <p>(2)は個人タクシーになるには届け出・許可が必要だからです。</p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Uber">Uber</a>のモデルは、個人タクシーの活用が中心みたいですが、実際は「配車の管理」にあります。</p> <p>タクシーを管理し、利用率を上げることが、根幹にあるわけです。</p> <p> </p> <p>この「配車の管理」、日本にもあります。</p> <p>Japan Taxiの<a href="https://japantaxi.jp" target="_blank">全国タクシー</a>です。</p> <p> </p> <p>日本はいまだタクシーをアプリで呼べない、みたいな風潮がありますが、それは間違い。</p> <p>全国タクシーは、国内トップシェアを持つ、タクシー配車サービスです。</p> <p> </p> <p>ちなみに、<a href="https://jp.techcrunch.com/2018/02/08/toyota-japantaxi/" target="_blank">今年の2月にトヨタ自動車と共同開発のための合意</a>がされました。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C8%A5%E8%A5%BF">トヨタ</a>の持つ<a href="https://newsroom.toyota.co.jp/jp/detail/14096246" target="_blank">モビリティサービス・プラットフォーム</a>と連携する形になります。</p> <p>具体的には、次の3点において協業する予定です。</p> <ol> <li>コネクティッド端末</li> <li>配車支援システム</li> <li>ビックデータ解析</li> </ol> <p> </p> <p>さて、前置きが長くなりましたが、今年の秋からタクシー配車を開始する企業があります。</p> <p>DiDiモビリティジャパンの「<a href="http://didimobility.co.jp" target="_blank">DiDi Taxi</a>」です。</p> <p>大阪から始め、京都、福岡、沖縄、東京と<a href="https://www.softbank.jp/corp/group/sbm/news/press/2018/20180719_02/" target="_blank">トライアルで無償提供</a>します。</p> <p>BMCはこちら。</p> <p><img class="hatena-fotolife" title="f:id:yuki_sasano:20180819183104p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/y/yuki_sasano/20180819/20180819183104.png" alt="f:id:yuki_sasano:20180819183104p:plain" /></p> <p><span style="color: #222222; font-family: 'Helvetica Neue', Helvetica, Arial, 'ヒラギノ角ゴ Pro W3', 'Hiragino Kaku Gothic Pro', メイリオ, Meiryo, 'MS Pゴシック', 'MS PGothic', sans-serif; font-size: 15px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;">・オペレーションサイド</span></p> <p>アプリを介し、タクシーの提供者と利用者をつなぐモデル。</p> <p>ここに、他のタクシー配車サービスと違いは見られません。</p> <p> </p> <p> </p> <p>・<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DE%A1%BC%A5%B1%A5%C6%A5%A3%A5%F3%A5%B0">マーケティング</a>サイド</p> <p>DiDiは<a href="https://www.didiglobal.com" target="_blank">中国の企業</a>で、DiDiモビリティジャパンは<a class="keyword" href="http://d.hatena.ne.jp/keyword/Softbank">Softbank</a>との<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B9%E7%CA%DB%B2%F1%BC%D2">合弁会社</a>になります。</p> <p>そのため、タクシー利用者の中には中国人(観光客含む)が潜在しています。</p> <p>実際、日中の自動翻訳ツールを導入したり、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Alipay">Alipay</a>やWeChat Payでの支払い可としています。</p> <p>また、憶測ですが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Softbank">Softbank</a>系の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%DE%A5%DB">スマホ</a>にDiDi Taxiのアプリがプリインストールされるかもしれませんね。</p> <p>(つまり、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Softbank">Softbank</a>での契約者も<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%F8%BA%DF%C5%AA">潜在的</a>なユーザとなり得る)</p> <p> </p> <p> </p> <p>・まとめ</p> <p>ビジネスモデルの真新しさはないので、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Softbank">Softbank</a>についての感想を中心に。</p> <p> </p> <p>DiDiは<a class="keyword" href="http://d.hatena.ne.jp/keyword/Uber">Uber</a>中国を買収しています。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Uber">Uber</a>日本の行く末は分かりませんが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Uber">Uber</a>の日本での浸透は、口コミ評判によりそう。</p> <p>なんだか、[<a class="keyword" href="http://d.hatena.ne.jp/keyword/Softbank">Softbank</a> x DiDi]と、前述の[<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C8%A5%E8%A5%BF">トヨタ</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/x%20Japan">x Japan</a> Taxi]が双肩をなすように思います。</p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Softbank">Softbank</a>は日本のタクシー会社を選ばず、海外企業とタクシー業界に乗り込んだ点がすごい。</p> <p>中国で有名なDiDiとの協業なので、すでにDiDiを知っている中国人ユーザは獲得済み。</p> <p>日本の外国人観光客は中国人が最多で、サービスのトライアルも観光地に集中させていますね。</p> <p> </p> <p>ただ、(イメージ的にも)タクシーって高いので、どうやってお得感を演出できるか。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Softbank">Softbank</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%DE%A5%DB">スマホ</a>でのクーポンとか良いのでは?</p> <p> </p> <p> </p> <p>サービスのWebサイト↓</p> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="サービス | DiDiモビリティジャパン" src="https://hatenablog-parts.com/embed?url=http%3A%2F%2Fdidimobility.co.jp%2Fservice%2F" frameborder="0" scrolling="no"></iframe></p> <p> </p> <p>企業のWebサイト↓</p> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="DiDiで今までにない移動体験を | DiDiモビリティジャパン" src="https://hatenablog-parts.com/embed?url=http%3A%2F%2Fdidimobility.co.jp" frameborder="0" scrolling="no"></iframe></p> <p> </p> <p> </p> <p>以上。</p> <p> </p> <p> </p> yuki_sasano 【sitateru】日本のスタートアップに学ぶビジネスモデル【BMC】 hatenablog://entry/10257846132599282934 2018-07-08T19:25:34+09:00 2018-07-08T19:27:15+09:00 少しお金払えば、オリジナルの衣服が簡単に作れる時代。 (センスがあれば、ネットで売って稼げる時代) はろー、yukiです。 皆さんはどこで衣服を買っていますか? おそらく、複合型施設にあるような店で買うことが多いのではないでしょうか。 個人店や古着屋のユーザーはそれほど多くなく、ハイブランドを着る人も少ない。 つまり、衣服のセンスは大体、似通ってしまうと言えますよね。 ただ、世の中には本当にセンスのある人たちがいます。 その人たちは、多くの人が知らない場所で衣服を見つけて着こなしている。 衣服へのオリジナリティ志向は未だあって、それは個人から様々な組織にも見られます。 例えば、ユニフォーム。イ… <p>少しお金払えば、オリジナルの衣服が簡単に作れる時代。</p> <p>(センスがあれば、ネットで売って稼げる時代)</p> <p> </p> <p>はろー、<a class="keyword" href="http://d.hatena.ne.jp/keyword/yuki">yuki</a>です。</p> <p> </p> <p>皆さんはどこで衣服を買っていますか?</p> <p>おそらく、複合型施設にあるような店で買うことが多いのではないでしょうか。</p> <p>個人店や古着屋のユーザーはそれほど多くなく、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%CF%A5%A4%A5%D6%A5%E9%A5%F3%A5%C9">ハイブランド</a>を着る人も少ない。</p> <p>つまり、衣服のセンスは大体、似通ってしまうと言えますよね。</p> <p> </p> <p>ただ、世の中には本当にセンスのある人たちがいます。</p> <p>その人たちは、多くの人が知らない場所で衣服を見つけて着こなしている。</p> <p>衣服へのオリジナリティ志向は未だあって、それは個人から様々な組織にも見られます。</p> <p>例えば、ユニフォーム。イベント用に手配したデザインなど。</p> <p>衣服のオリジナリティのポテンシャルは、今後も地道に残ると思っています。</p> <p> </p> <p>さて、問題はオリジナルのデザインを企画したが、実現まで道のりが遠かったことにあります。</p> <p>衣服の生産工程は多く、その一つ一つと連携してくのが難しかったわけです。</p> <p>そのポイントに目を付けたのが、今回紹介するスタートアップ。</p> <p>オンラインで衣服生産をサポートする「<a href="https://sitateru.com/about/" target="_blank">sitateru(シタテル)</a>」です。</p> <p>BMCはこちら。</p> <p><img class="hatena-fotolife" title="f:id:yuki_sasano:20180708184249p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/y/yuki_sasano/20180708/20180708184249.png" alt="f:id:yuki_sasano:20180708184249p:plain" /></p> <p>・オペレーションサイド</p> <p>衣服の生産工程にかかるメーカー・専門店がパートナーです。その数は500社。</p> <p>sitateruでは、まずユーザーの仕様(衣服、枚数、予算、納期など)を<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D2%A5%A2%A5%EA">ヒアリ</a>ング。</p> <p>その後、パートナーにて生産を開始し、量産の納品までを対応します。</p> <p>顧客とパートナーが多岐にわたるため、その管理が負担となりやすいです。</p> <p> </p> <p> </p> <p>・<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DE%A1%BC%A5%B1%A5%C6%A5%A3%A5%F3%A5%B0">マーケティング</a>サイド</p> <p>衣服を作りたい要望は、アパレルだけにとどまりません。</p> <p>団体や企業、学校、協会など、様々な組織もターゲットになります。</p> <p>例えば、大学のサークルが文化祭で用意するとしたら、50枚くらいでしょうか(少し多い?)。</p> <p>そうした小ロット・多品種にも対応できるのがsitateruの強みです。</p> <p>※同社の2018年2月のデータによると、59.6%の工場で50枚から対応可。</p> <p> </p> <p> </p> <p>・まとめ</p> <p>料金の回収が2回に分けられている点が、ポイントが高いです。</p> <p>企業向けのビジネスではよくあることですが、支払いの分割は利益確保につながります。</p> <p>相手の支払い状況に左右されない、回収方法です。</p> <p> </p> <p>sitateruの場合、サンプル納品後に「量産はやめます」という状況になり得るでしょう。</p> <p>もともと量産を目標に動くサービスだからこそ、途中棄権はマイナスです。</p> <p>各種パートナーの稼働状況を把握し、量産計画を立てているからです。</p> <p>ですので、1回目の回収で、量産用費用の半分を回収するのは、良いア<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A4%A5%C7%A5%A2">イデア</a>です。</p> <p>(よくあるのが、量産取り消しのため罰金を請求するパターン。これは良くない)</p> <p> </p> <p> </p> <p>個人的には、50枚の小ロットを活かすのが良いと思います。</p> <p>個人事業のアパレル業の方にしてみれば、試行錯誤しやすい数ではないでしょうか。</p> <p>あと、デザイナー志望の方は、完成品まで用意したという点で評価が高くなるような...。</p> <p>他には、同人系の販促物とか、限定品も作りやすような。</p> <p> </p> <p> </p> <p>衣服の生産委託系のサービスは、他にはあると思いますが、ここほど柔軟性はないと思います。</p> <p> </p> <p> </p> <p>サービスのWebサイト↓</p> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="シタテルについて|sitateru - シタテル -" src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fsitateru.com%2Fabout%2F" frameborder="0" scrolling="no"></iframe><a href="https://sitateru.com/about/"> </a>企業のWebサイト↓</p> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="シタテル株式会社 | IMAGINATION" src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fsitateru.co.jp" frameborder="0" scrolling="no"></iframe></p> <p> </p> <p><br />以上。</p> <p> </p> yuki_sasano