tag:crieit.net,2005:https://crieit.net/users/Morichan/feed Morichanの投稿 - Crieit CrieitでユーザーMorichanによる最近の投稿 2022-10-28T20:17:34+09:00 https://crieit.net/users/Morichan/feed tag:crieit.net,2005:PublicArticle/18310 2022-10-28T20:17:34+09:00 2022-10-28T20:17:34+09:00 https://crieit.net/posts/scrum-master-knowledge スクラムマスターについて、研修で得た知見 <h1 id="TL; DR"><a href="#TL%3B+DR">TL; DR</a></h1> <p>スクラムは1日にしてならず。</p> <h1 id="内容"><a href="#%E5%86%85%E5%AE%B9">内容</a></h1> <p>スクラムマスター研修を受けたので、その際に得た知見を書いておきます。<br /> スクラムマスター研修とありますが、実際にはスクラムに対する知識も増えたので、スクラム全体に対する内容もあります。</p> <h1 id="スクラムについて"><a href="#%E3%82%B9%E3%82%AF%E3%83%A9%E3%83%A0%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6">スクラムについて</a></h1> <p><a target="_blank" rel="nofollow noopener" href="https://scrumguides.org/docs/scrumguide/v2020/2020-Scrum-Guide-Japanese.pdf">スクラムガイド</a></p> <h2 id="シンプルさ"><a href="#%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%95">シンプルさ</a></h2> <p>スクラムは、スクラム単体では不完全なように意図的に作られている。<br /> スクラムは、拡張できる。</p> <h2 id="リスクについて"><a href="#%E3%83%AA%E3%82%B9%E3%82%AF%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6">リスクについて</a></h2> <p>アジャイルではリスクを下げ続ける、ウォーターフォールではリスクが上がり続ける。</p> <h2 id="スクラムマスターが実施すべきこと"><a href="#%E3%82%B9%E3%82%AF%E3%83%A9%E3%83%A0%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%BC%E3%81%8C%E5%AE%9F%E6%96%BD%E3%81%99%E3%81%B9%E3%81%8D%E3%81%93%E3%81%A8">スクラムマスターが実施すべきこと</a></h2> <ul> <li>専任の/安定したチームの構築</li> <li>明確な「完成の定義」の策定</li> <li>スクラムが明らかにしていることを、無視せず対処</li> </ul> <h2 id="スクラムの要素"><a href="#%E3%82%B9%E3%82%AF%E3%83%A9%E3%83%A0%E3%81%AE%E8%A6%81%E7%B4%A0">スクラムの要素</a></h2> <p>スクラムには、次の要素がある。</p> <ul> <li>3つの役割</li> <li>3つのアーティファクト(成果物)</li> <li>5つのイベント</li> </ul> <h3 id="3つの役割"><a href="#3%E3%81%A4%E3%81%AE%E5%BD%B9%E5%89%B2">3つの役割</a></h3> <ul> <li>プロダクトオーナー</li> <li>開発者</li> <li>スクラムマスター <ul> <li>スクラムマスターは場を用意する責任はあるが、問題を解決する責任は無い</li> <li>スクラムマスターはスポーツコーチのようなもの</li> <li>スクラムマスターは、最初に、自分の助けが必要か尋ねる(自分から首を突っ込むことはしない)</li> </ul></li> </ul> <h3 id="3つのアーティファクト"><a href="#3%E3%81%A4%E3%81%AE%E3%82%A2%E3%83%BC%E3%83%86%E3%82%A3%E3%83%95%E3%82%A1%E3%82%AF%E3%83%88">3つのアーティファクト</a></h3> <ul> <li>プロダクトバックログ</li> <li>スプリントバックログ</li> <li>インクリメント</li> </ul> <h3 id="5つのイベント"><a href="#5%E3%81%A4%E3%81%AE%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88">5つのイベント</a></h3> <ul> <li>スプリント</li> <li>スプリントプランニング</li> <li>デイリースクラム</li> <li>スプリントレビュー</li> <li>スプリントレトロスペクティブ</li> </ul> <p>リファインメントは、頻度が高いため、イベントに含まれない(後述)。</p> <h2 id="3つの役割に大切なこと"><a href="#3%E3%81%A4%E3%81%AE%E5%BD%B9%E5%89%B2%E3%81%AB%E5%A4%A7%E5%88%87%E3%81%AA%E3%81%93%E3%81%A8">3つの役割に大切なこと</a></h2> <h3 id="プロダクトオーナー:決断力(と権限)"><a href="#%E3%83%97%E3%83%AD%E3%83%80%E3%82%AF%E3%83%88%E3%82%AA%E3%83%BC%E3%83%8A%E3%83%BC%EF%BC%9A%E6%B1%BA%E6%96%AD%E5%8A%9B%EF%BC%88%E3%81%A8%E6%A8%A9%E9%99%90%EF%BC%89">プロダクトオーナー:決断力(と権限)</a></h3> <p>プロダクトオーナーは、高速に変化する外部/内部の状況に対して、迅速な決断をする必要がある。<br /> また、外部への承認を通せるだけの権限が必要である。</p> <h3 id="開発者:汎用性"><a href="#%E9%96%8B%E7%99%BA%E8%80%85%EF%BC%9A%E6%B1%8E%E7%94%A8%E6%80%A7">開発者:汎用性</a></h3> <p>開発者はエキスパート(1つのことしかしない人)になってはならない。<br /> どのようなタスクに対しても実行できるだけの知識を得る必要がある。</p> <h3 id="スクラムマスター:影響力"><a href="#%E3%82%B9%E3%82%AF%E3%83%A9%E3%83%A0%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%BC%EF%BC%9A%E5%BD%B1%E9%9F%BF%E5%8A%9B">スクラムマスター:影響力</a></h3> <p>スクラムマスターは、他者を巻込むための影響力が大切である。<br /> 影響力には、権威は必要無いが、知識/資格/コネといったソフトスキルが重要となる。</p> <h2 id="リファインメントの頻度"><a href="#%E3%83%AA%E3%83%95%E3%82%A1%E3%82%A4%E3%83%B3%E3%83%A1%E3%83%B3%E3%83%88%E3%81%AE%E9%A0%BB%E5%BA%A6">リファインメントの頻度</a></h2> <p>プロダクトバックログのリファインメントは、プロダクトオーナーが予定をたててでも、最低限でも毎日は実施すべき。<br /> 理想としては、1日に何回でも実施すべき。</p> <p>また、スプリントバックログは、すべての開発者がリアルタイムに作業状況を反映させるべき。</p> <p>これが、デイリースクラムで進捗報告しなくても問題ない理由となる(バックログを見ればわかることをわざわざいう必要はない)。</p> <h2 id="外部からの仕事の対処"><a href="#%E5%A4%96%E9%83%A8%E3%81%8B%E3%82%89%E3%81%AE%E4%BB%95%E4%BA%8B%E3%81%AE%E5%AF%BE%E5%87%A6">外部からの仕事の対処</a></h2> <p>スクラムマスターや開発者に対して、外部からの仕事が依頼された場合は、プロダクトオーナーに判断を仰ぐ。<br /> それにより進捗が遅くなるのはプロダクトオーナーの責任となる。<br /> それをプロダクトオーナーが許容するのであれば、外部の仕事をスクラムチームメンバが担って構わない。</p> <h2 id="ユーザーストーリーに必要なもの"><a href="#%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AA%E3%83%BC%E3%81%AB%E5%BF%85%E8%A6%81%E3%81%AA%E3%82%82%E3%81%AE">ユーザーストーリーに必要なもの</a></h2> <p>以下の要素を含める。</p> <ul> <li>誰が、......をしたい、なぜなら......</li> <li>価値(受入基準)</li> <li>作者(チケット作成者)</li> <li>見積り</li> </ul> <p>プロダクトオーナーにプロダクトバックログの価値を理解させるためのツールの1つであることに気をつける。<br /> プロダクトバックログアイテムの1つにリファクタリングとあっても、それだけではプロダクトオーナーは価値を見出せずに無視してしまうかもしれない。<br /> ここに、顧客の価値を書く事で、プロダクトオーナーの注意を引きつけることができるはず。</p> <h2 id="スプリント計画のトピック"><a href="#%E3%82%B9%E3%83%97%E3%83%AA%E3%83%B3%E3%83%88%E8%A8%88%E7%94%BB%E3%81%AE%E3%83%88%E3%83%94%E3%83%83%E3%82%AF">スプリント計画のトピック</a></h2> <p>以下の要素を含める。</p> <ul> <li>スプリントの価値</li> <li>できるようになること</li> <li>できるようにする方法</li> </ul> <p>スプリント計画で開発者を割当てるのはスプリントバックログアイテムではなくタスクであることに注意する。<br /> 1つのスプリントバックログを、開発者全員でタスクに取掛かることが望ましい。</p> <h2 id="各イベントの理想的な時間配分"><a href="#%E5%90%84%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%81%AE%E7%90%86%E6%83%B3%E7%9A%84%E3%81%AA%E6%99%82%E9%96%93%E9%85%8D%E5%88%86">各イベントの理想的な時間配分</a></h2> <ul> <li>スプリント:1day ~ 4weeks</li> <li>スプリント計画:8h/month</li> <li>デイリースクラム:15min/day</li> <li>スプリントレビュー:4h/month</li> <li>スプリントレトロスペクティブ:3h/month</li> </ul> <h1 id="スクラム運用のテクニックについて"><a href="#%E3%82%B9%E3%82%AF%E3%83%A9%E3%83%A0%E9%81%8B%E7%94%A8%E3%81%AE%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6">スクラム運用のテクニックについて</a></h1> <h2 id="スクラムの要素 + α"><a href="#%E3%82%B9%E3%82%AF%E3%83%A9%E3%83%A0%E3%81%AE%E8%A6%81%E7%B4%A0+%2B+%CE%B1">スクラムの要素 + α</a></h2> <p>以下は例として挙げる。</p> <ul> <li>5つの役割 = 3 + 2</li> <li>6つのアーティファクト = 3 + 3</li> <li>7つのイベント = 5 + 2</li> </ul> <h3 id="5つの役割"><a href="#5%E3%81%A4%E3%81%AE%E5%BD%B9%E5%89%B2">5つの役割</a></h3> <ul> <li>プロダクトオーナー</li> <li>開発者</li> <li>スクラムマスター</li> <li><strong>ステークホルダー</strong></li> <li><strong>スクラムメンター</strong> <ul> <li>スクラムマスターを補助するための、スクラムチーム外の人</li> <li>スクラムマスターのコーチ役</li> </ul></li> </ul> <h3 id="6つのアーティファクト"><a href="#6%E3%81%A4%E3%81%AE%E3%82%A2%E3%83%BC%E3%83%86%E3%82%A3%E3%83%95%E3%82%A1%E3%82%AF%E3%83%88">6つのアーティファクト</a></h3> <ul> <li>プロダクトバックログ</li> <li>スプリントバックログ</li> <li>インクリメント</li> <li><strong>プロダクトゴール</strong></li> <li><strong>プロダクトロードマップ</strong></li> <li><strong>リリース計画</strong></li> </ul> <h3 id="7つのイベント"><a href="#7%E3%81%A4%E3%81%AE%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88">7つのイベント</a></h3> <ul> <li>スプリント</li> <li>スプリントプランニング</li> <li>デイリースクラム</li> <li>スプリントレビュー</li> <li>スプリントレトロスペクティブ</li> <li><strong>プロダクト計画</strong></li> <li><strong>リリース計画</strong></li> </ul> <h2 id="Geoffrey Moore氏のプロダクトビジョン・テンプレート"><a href="#Geoffrey+Moore%E6%B0%8F%E3%81%AE%E3%83%97%E3%83%AD%E3%83%80%E3%82%AF%E3%83%88%E3%83%93%E3%82%B8%E3%83%A7%E3%83%B3%E3%83%BB%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88">Geoffrey Moore氏のプロダクトビジョン・テンプレート</a></h2> <p>プロダクトゴールを見据えるためのテンプレートの例を、以下に示す。</p> <pre><code class="html"><顧客ニーズの内容>がある<ターゲット顧客>のための<プロダクト名>は、<ユニークな顧客のメリットやセールスポイント>がある<プロダクトカテゴリ名>です。 <競合や代替手段名>と異なり、我々のプロダクトは<主な差別化ポイント>に強みがあります。 </code></pre> <p><a target="_blank" rel="nofollow noopener" href="https://blog.allstarsaas.com/posts/make-product-vision">日本のSaaSにはまだ足りない…急成長を支える「プロダクトビジョン」を作るための8つのポイント - ALL STAR SAAS BLOG</a></p> <h2 id="同意形成のテクニック"><a href="#%E5%90%8C%E6%84%8F%E5%BD%A2%E6%88%90%E3%81%AE%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF">同意形成のテクニック</a></h2> <p>難しそうなテクニックはなるべく避ける、簡単な合意にツールは必要ない。</p> <h3 id="抵抗ポイント"><a href="#%E6%8A%B5%E6%8A%97%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88">抵抗ポイント</a></h3> <ol> <li>項目を複数並べ、各項目に対し、0=喜ばしい〜9=本当に嫌、の10段階で各人にポイントを振り分けてもらう</li> <li>合計し、最も数値が低いものを選ぶ</li> </ol> <h3 id="5本指投票"><a href="#5%E6%9C%AC%E6%8C%87%E6%8A%95%E7%A5%A8">5本指投票</a></h3> <ol> <li>5=素敵!〜1=反対で進めてはいけない、までを片手で出してもらう</li> <li>項目を順に出していって、全員が3以上ならその数字で確定する</li> </ol> <h2 id="見積り手法"><a href="#%E8%A6%8B%E7%A9%8D%E3%82%8A%E6%89%8B%E6%B3%95">見積り手法</a></h2> <h3 id="相対見積り"><a href="#%E7%9B%B8%E5%AF%BE%E8%A6%8B%E7%A9%8D%E3%82%8A">相対見積り</a></h3> <ol> <li>見積りポーカー <ol> <li>最初にアンカー(指標)となるプロダクトバックログアイテムを開発者全員で選択し、5と仮定する</li> <li>それと比較し、開発者に数字を提示してもらう(プロダクトオーナーとスクラムマスターは出さない)</li> <li>差がない場合は、その数値で確定し、次のプロダクトバックログアイテムを選択する</li> <li>差がある場合 <ol> <li>最小数値を出した人と最大数値を出した人に意見を伺う</li> <li>3回やってもまとまらない場合は、手順2. に進む</li> <li>手順1.2. に戻る</li> </ol></li> </ol></li> <li>5本指投票:Fist of Five <ol> <li>全員が出した数字を大きい(小さい)順に出していく</li> <li>全員が3以上ならその数字で確定する</li> <li>そうで無いなら、手順2.1に戻る</li> </ol></li> </ol> <h3 id="類似性に基づく見積り"><a href="#%E9%A1%9E%E4%BC%BC%E6%80%A7%E3%81%AB%E5%9F%BA%E3%81%A5%E3%81%8F%E8%A6%8B%E7%A9%8D%E3%82%8A">類似性に基づく見積り</a></h3> <p>大量のチケットを捌く時に役立つ。</p> <ol> <li>MS, S, M, L, XLに相当するチケットを、それぞれに代表して1つずつ開発者が選ぶ</li> <li>全チケットを、MS, S, M, L, XLに開発者が当てはめる(ここは手分けしてで良い)</li> <li>全チケットを開発者が参照し、気になったチケットについて議論してもらう</li> <li>プロダクトオーナーにチケットサイズをレビューしてもらう</li> </ol> <h2 id="スクラムでよく使用されるが、スクラムでは規定されていないもの"><a href="#%E3%82%B9%E3%82%AF%E3%83%A9%E3%83%A0%E3%81%A7%E3%82%88%E3%81%8F%E4%BD%BF%E7%94%A8%E3%81%95%E3%82%8C%E3%82%8B%E3%81%8C%E3%80%81%E3%82%B9%E3%82%AF%E3%83%A9%E3%83%A0%E3%81%A7%E3%81%AF%E8%A6%8F%E5%AE%9A%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%81%AA%E3%81%84%E3%82%82%E3%81%AE">スクラムでよく使用されるが、スクラムでは規定されていないもの</a></h2> <p>3つの役割/3つのアーティファクト/5つのイベント以外の全ては、スクラムでは規定されていないと考えて良い。<br /> 例えば、次の項目はスクラムでは無い。</p> <ul> <li>プロダクトロードマップ</li> <li>リリース計画</li> <li>ユーザーストーリー</li> <li>プランニングポーカー</li> <li>デイリースクラムにおけるスタンドアップミーティング <ul> <li>補足:<a target="_blank" rel="nofollow noopener" href="https://bliki-ja.github.io/ItsNotJustStandingUp/">朝会のパターン:立ってるだけじゃないよ - Martin Fowler's Bliki (ja)</a></li> </ul></li> </ul> <h1 id="大規模なスクラムチームの運用"><a href="#%E5%A4%A7%E8%A6%8F%E6%A8%A1%E3%81%AA%E3%82%B9%E3%82%AF%E3%83%A9%E3%83%A0%E3%83%81%E3%83%BC%E3%83%A0%E3%81%AE%E9%81%8B%E7%94%A8">大規模なスクラムチームの運用</a></h1> <h2 id="スクラムオブスクラムズ"><a href="#%E3%82%B9%E3%82%AF%E3%83%A9%E3%83%A0%E3%82%AA%E3%83%96%E3%82%B9%E3%82%AF%E3%83%A9%E3%83%A0%E3%82%BA">スクラムオブスクラムズ</a></h2> <ol> <li>スクラムチームの開発者に1人、開発者のスクラムオブスクラムズを用意する。同様に、スクラムマスターをスクラムオブスクラムズとする</li> <li>全スクラムチームのデイリースクラムを、同じ時間に(もちろん各スクラムチーム毎に)対応する</li> <li>デイリースクラム完了後、スクラムチームの代表者として、開発者のスクラムオブスクラムズとスクラムマスターのスクラムオブスクラムズを、それぞれの会議体として用意し、スクラムチーム間の内容を調整する</li> <li>終わったら、各スクラムチームに戻って伝える(ここは会議体にする必要はない)</li> </ol> <h2 id="アジャイル移行チーム"><a href="#%E3%82%A2%E3%82%B8%E3%83%A3%E3%82%A4%E3%83%AB%E7%A7%BB%E8%A1%8C%E3%83%81%E3%83%BC%E3%83%A0">アジャイル移行チーム</a></h2> <p>組織をスクラムに適応するための「アジャイル移行チーム」というスクラムチームを用意しても良い。<br /> 開発スクラムチームで検知した妨害に関する項目が、アジャイル移行チームのプロダクトバックログとなる。</p> <h2 id="組織の障害"><a href="#%E7%B5%84%E7%B9%94%E3%81%AE%E9%9A%9C%E5%AE%B3">組織の障害</a></h2> <p>組織をスクラムに適応しようとする際に発生する障害の例を、以下に示す。</p> <ul> <li>マトリックス化/分断したチーム</li> <li>スペシャリスト/単一障害点</li> <li>サイロ/ハンドオフ</li> <li>権限を与えられていないPO</li> <li>専門的な移行サポート無し(コーチング無し)</li> <li>「私たちの会社は他社とは違う」という意識</li> </ul> Morichan tag:crieit.net,2005:PublicArticle/17788 2021-11-26T19:37:42+09:00 2021-12-08T10:31:53+09:00 https://crieit.net/posts/UML-61a0b8f65e9fb 実践UML記述法:シーケンス図で継承元(親クラス)のメッセージ(メソッド)を利用する際の書き方について <h1 id="TL; DR"><a href="#TL%3B+DR">TL; DR</a></h1> <p><code>クラス名::メソッド名</code> なんてどうでしょう?</p> <h1 id="本題:シーケンス図で継承元(親クラス)のメッセージを利用する"><a href="#%E6%9C%AC%E9%A1%8C%EF%BC%9A%E3%82%B7%E3%83%BC%E3%82%B1%E3%83%B3%E3%82%B9%E5%9B%B3%E3%81%A7%E7%B6%99%E6%89%BF%E5%85%83%EF%BC%88%E8%A6%AA%E3%82%AF%E3%83%A9%E3%82%B9%EF%BC%89%E3%81%AE%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%82%92%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B">本題:シーケンス図で継承元(親クラス)のメッセージを利用する</a></h1> <p>シーケンス図のメッセージは、ライフラインがクラス図のクラスと紐付いている場合、クラスの操作を使うことが一般的かと思います。</p> <p><img src="http://www.plantuml.com/plantuml/png/SoWkIImgAStDuIh9BCb9LNZSjFvnyyh7JJkVpjxyk77TattTN5p5sPbv1Ob5YRaAoJc9nSME9IL5cKcb9QcUoVbvmPbLgGe6N5nW6OMd7IkVJrdneg5LePgh5Yg8C18egA2WhV1iSk-JlNCqD44g479AXWgw2gN5gIbA2ZQwka2k4i8qBeVKl1IW6m40" alt="クラス図の例" /> <img src="http://www.plantuml.com/plantuml/png/SoWkIImgAStDuIh9BCb9LNZSjFrnyvx7JHiVDsz-tBJpwUpDZnlNFTdNpSLL05INcPnPa9XNeg1afV2qO-NpAIjUDBGgAIGM8tYeoagBKrCKh826hd_Sl19e74WjWiV51TUce6k74BTIU3QvzydUEHgQN0wfUIb0nm40" alt="シーケンス図の例" /></p> <p>2つだけのクラスを持つクラス図とシーケンス図</p> <pre><code class="puml">@startuml title クラス図の例 skinparam classAttributeIconSize 0 class 利用者 { } class クラス { + 操作() } クラス "1 - used" <-- "1" 利用者 @enduml </code></pre> <pre><code class="puml">@startuml title シーケンス図の例 participant ": 利用者" as 利用者 participant "used : クラス" as クラス 利用者 -> クラス: 操作() @enduml </code></pre> <p>しかし、継承元クラス(親クラス)のメッセージを利用する際、クラスとしては持っていない(かのように見える)メソッドを呼出すように書く必要があります。</p> <p><img src="http://www.plantuml.com/plantuml/png/SoWkIImgAStDuIh9BCb9LNY-RUQpplsF6tiC7pSkURfsnjCvAnutpdpSrFsuQVtZvfMFctO-dRtvSUEw9_kwkRYAipFp2XAB4dCLadCIYuiTIqgACfDAIr8za_FpWZEhKXKCkBZ0CWfFErO-dxBYHKEhGZLNBKpmnR9LS5E1uWeAsWhF9lS-sJj7GnEX2Au2eXD5ZqsDhYv20HT2GibGGLUXj3WrHKd1HbSNo5L2k83B8JKl1UXX0000" alt="継承が1つ存在するクラス図の例" /> <img src="http://www.plantuml.com/plantuml/png/SoWkIImgAStDuIh9BCb9LNY-RUQpplsF6tiC7pSkURfsnjCvAnutpdpSrFsuQVlZvZsFcpO-Rjxyk6ddqzcR7pUkUxAlcukh06X0Pd9cGM9UYOAIbSBJZfNFfwnuqT2gf91OZE2XAYijJarHi59utBJ-SVDAe74WjGWU5nTScuAk7KBSIk7PvDudU-TeQ7BbvPUaAXHbfcUKM2cyMBZYnOePJtPq0Ltqid7guyOMeFkVjom4ChWSKlDIWBu30000" alt="継承が1つ存在するシーケンス図の例" /></p> <p>継承が1つ存在するクラス図とシーケンス図</p> <pre><code class="puml">@startuml title 継承が1つ存在するクラス図の例 skinparam classAttributeIconSize 0 class 利用者 { } class 親クラス { + 操作() } class クラス { } 親クラス <|-- クラス クラス "1 - used" <-- "1" 利用者 @enduml </code></pre> <pre><code class="puml">@startuml title 継承が1つ存在するシーケンス図の例 participant ": 利用者" as 利用者 participant "used : クラス" as クラス 利用者 -> クラス: 操作() note right: 表記上の違いが無い @enduml </code></pre> <p>上記はわかりやすい例ですが、下記のように継承とメッセージが複数存在すると、どのクラスのどのメソッドが使われているのか把握しづらくなります。<br /> 特に、子クラスのメソッドで親クラスのメソッドを呼出すような形は、どれがどのクラスで実装されているのか把握しづらいです。</p> <p><img src="http://www.plantuml.com/plantuml/png/SoWkIImgAStDuIh9BCb9LNY-RUQpplsF6tjUB6b_DdN3qxKpdivPyRXn-kF6PI-MJNknglTPmtAWxBEcLOyRMnuthN_SlF9nqywdipS_RbptP5yt5rTnTcPUGM9HOgv2SavYSR5ZIKbHPb9fIQfdSdvUS6PLge815nTOHk5fnyhdKrQyQ6XLgEQgXGc-N3tZ-T9fppksFLlV2pSUg411GLiXkIWriIHLGnEX-jdilJXL0nMd8Al5gR2q80NDs1VBLg4hIadDIKLLXAxYsUJU9tldG5HWzuLDZQukTYTpmKKnDM1HZKCfYhkvO1o4D48E8Q5agA2hK5gScgAaOAEh2-Gg8UA5oo4rBmMOD000" alt="継承が複数存在して視認性が悪いクラス図の例" /> <img src="http://www.plantuml.com/plantuml/png/VP7BIiD058RtynH3Lxhm1RAGFaWteJDe88uXcUmxCnMr5rnufrKeIcqALgNW1Iy-p6ccyIqyZP2WO3U7dFpVV6SEKusa6yfuooVIapwdyyTpk_y9gfDTxzhZ-_JsBEsFG9s26cR3aspSjOqRJAqUWsg2VWBp1le1p1JqIzgRWfhCFjg412ZrwbxW2aah3attaldHA6liLAWRbTrlB8uuemu5VGScGTs2BJj2YcDqRRtyxr1xs9szzrTMYTYMd8RUngP4Yxe0tG5rcTS9c04O0_erl-ypRb0Je19C2b7-hHTLjMl2jbhsO83SL-ygNxz92lBF_92x3AV_5pFkSycN07KKB0NYWFq0LIuOFjKt" alt="継承が複数存在して視認性が悪いシーケンス図の例" /></p> <p>継承が複数存在して視認性が悪いクラス図とシーケンス図</p> <pre><code class="puml">@startuml title 継承が複数存在して視認性が悪いクラス図の例 skinparam classAttributeIconSize 0 class 利用者 { } class 高祖父母クラス { + create() } class 曽祖父母クラス { + read() } class 祖父母クラス { + update() } class 親クラス { + delete() } class クラス { + 操作() } 高祖父母クラス <|-- 曽祖父母クラス 曽祖父母クラス <|-- 祖父母クラス 祖父母クラス <|-- 親クラス 親クラス <|-- クラス クラス "1 - used" <-- "1" 利用者 @enduml </code></pre> <pre><code class="puml">@startuml title 継承が複数存在して視認性が悪いシーケンス図の例 participant ": 利用者" as 利用者 participant "used : クラス" as クラス 利用者 -> クラス: 操作() note right: それぞれのメッセージが\nどのクラスのものか\n把握が難しい クラス -> クラス: read() クラス -> クラス: delete() クラス -> クラス: create() クラス -> クラス: update() @enduml </code></pre> <p>また、上記のような状態において、UML2系で記法の定義はされていません。</p> <p>現状で最新のUML2.5.1では、メッセージの記法は以下のように定義されています。<br /> <code>request-message-label</code> という部分が今回のターゲットとなるメッセージラベルです。<br /> 中身を確認すると、メソッド名に該当する <code>message-name</code>、引数に該当する <code>input-argument-list</code> の2つしか存在しません。<br /> クラス図の属性や操作には <code>prop-modifier</code> という名で詳細を記述できるため以下様にもできるのですが、シーケンス図のメッセージには上記の様な補足も書けないことになっています。</p> <pre><code class="bnf"><message-label> ::= <request-message-label> | <reply-message-label> | ‘*’ <request-message-label> ::= <message-name> [‘(‘[<input-argument-list>] ’)’] <input-argument-list> ::= <input-argument> [‘,’<input-argument>*] <input-argument> ::= [<in-parameter-name> ‘=’] <value-specification> | ‘-’ ; <reply-message-label> の定義は省略する </code></pre> <blockquote> <p><a target="_blank" rel="nofollow noopener" href="https://www.omg.org/spec/UML/2.5.1/About-UML/">About the Unified Modeling Language Specification Version 2.5.1</a></p> </blockquote> <h1 id="解決策"><a href="#%E8%A7%A3%E6%B1%BA%E7%AD%96">解決策</a></h1> <p>ここで、 <code>message-name</code> の定義を考えてみます。<br /> 定義は以下の通りです。</p> <blockquote> <p>The message-name appearing in a request-message-label is the name property of the Message.<br /> If the Message has a signature, this will be the name of the Operation or Signal referenced by the signature.<br /> Otherwise the name is unconstrained.</p> <p>request-message-labelに表示されるmessage-nameは、そのMessageのnameプロパティです。<br /> Messageにシグネチャがある場合は、そのシグネチャで参照されるOperationやSignalの名前になります。<br /> それ以外の場合、名前は制約を受けません。</p> </blockquote> <p>ここでいう「シグネチャで参照されるOperationやSignal」は、多くはライフラインに紐付くクラスの操作(つまりメソッド)です。</p> <p>操作を記述する際、クラス名の記載の有無についてまで明記はありません。<br /> しかし、UMLの仕様書にも多く書かれている記述として <code>クラス名::操作名</code> という書き方が使える様です。<br /> であれば、メッセージ名としても同様の記述を使えば良いのではないでしょうか?</p> <p><img src="http://www.plantuml.com/plantuml/png/VP5DIiD074VtSugXArruWIoaLmcTMGHY2SratvaWHc8sVfIMPgV6jA9L2XN5wc7-dGzluGIXerAo_3_UczzYkZ7p1omv2X4BM4YnNatKwIVmCtDpegwUvCDObZNm2OYyWTN8p0irl0Dn3bnOgEjSlbNckWIUDOvuWVGTn3EaIn2lShe4_hZvo16Ax4pG2oA_pt37mpARwSlQ38yxs8_TzLTBOagmXq4i89tPvnhNNGXjCtnmwBY7rKMnMPTx-sZB_WlJjRuTwMob5eN3te3wfAKorVoNJ6X86MtHl-x7kqPwTgMrsnKb4Vc9khHFx6zz0m00" alt="継承が複数存在するが視認性をある程度補えるシーケンス図の例" /></p> <p>継承が複数存在するが視認性をある程度補えるシーケンス図</p> <pre><code class="puml">@startuml title 継承が複数存在するが視認性をある程度補えるシーケンス図の例 participant ": 利用者" as 利用者 participant "used : クラス" as クラス 利用者 -> クラス: 操作() クラス -> クラス: 曽祖父母クラス::read() クラス -> クラス: 親クラス::delete() クラス -> クラス: 高祖父母クラス::create() クラス -> クラス: 祖父母クラス::update() @enduml </code></pre> <h1 id="結論"><a href="#%E7%B5%90%E8%AB%96">結論</a></h1> <p>クラス図におけるクラスの属性や操作の補足的記法をベースに考えることが多いため、シーケンス図でも同様の書き方ができないかを調べた挙句、シンプルな記法を思いつきました。<br /> 遠回りした気もしますが、お蔭でさまざまな定義などの再学習もできたため、結果的には良かったと思います。<br /> 仕様書、万歳!</p> Morichan tag:crieit.net,2005:PublicArticle/16423 2020-12-25T07:00:11+09:00 2020-12-25T07:00:11+09:00 https://crieit.net/posts/GTD-Todoist 噂のGTDをTodoistで始めるための手順 <p>本記事は、<a href="https://crieit.net/advent-calendars/2020/crieit">Crieit なんでも Advent Calendar 2020</a>の最終日 (12/25) の記事です。</p> <h1 id="TL; DR"><a href="#TL%3B+DR">TL; DR</a></h1> <p>TodoistでのGTDは、悪くはありませんが最適でもありません。<br /> もしGTDに特化したツールがあれば、そちらを使う方がよいことは間違いないでしょう。<br /> 僕はTodoistを使います(意固地)。</p> <p>本記事はTodoistに特化していますが、それ以外のTODOリストのツールでも使える方法があると思います。</p> <h1 id="はじめに"><a href="#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB">はじめに</a></h1> <p>「タスク管理にTODOリストを使おう」と思い立っては三日坊主で辞めてしまう、という経験を何度もしており、4年前からアカウントを持っているTodoistを持て余していました。</p> <p><a target="_blank" rel="nofollow noopener" href="https://todoist.com/ja">Todoist: ToDoリストで仕事と生活を管理</a></p> <p>そんな時、GTDというタスク管理方法があると、噂で耳にしました。<br /> せっかくTodoistアカウントがあるから、これで挑戦してみようと考えました。</p> <p>その結果、なんと2週間も(僕にとっては1週間以上も続いたことが奇跡)もTodoistを使い続けることに成功しました。<br /> この手法は意外と僕に適しているのかもしれません。</p> <p><a target="_blank" rel="nofollow noopener" href="https://postd.cc/gtd-in-15-minutes/">15分で分かるGTD – 仕事を成し遂げる技術の実用的ガイド | POSTD</a></p> <p>GTDは方法論であり、特別なツールが用意されているわけではありません。<br /> また、僕はTodoistユーザーですが、TodoistにGTDの設定があるわけでもありません。</p> <p>そこで本記事では、TodoistでGTDを実施するために、僕の使いやすかった方法を紹介します。<br /> いくつか試行錯誤もあったため、それも交えて説明しようと思います。</p> <p>なお、僕のGTDに対する理解は、上記リンク先ページの知識しか無いため、理解が間違っている可能性もあります。<br /> ご注意ください。</p> <hr /> <p>ちなみに、この記事を書くために調べたら、ほとんど同じタイトルの記事を見つけてしまいました。<br /> 本記事での設定方法は下記と異なるため、本記事を読む際は、あくまで僕の使いやすかった例であると頭の片隅に置きながら読んでください。</p> <p><a target="_blank" rel="nofollow noopener" href="https://kiomiru.co.jp/blog/work/todoist-taskmanagement/">Todoistを用いたGTD式タスク管理術 | キオミルブログ</a></p> <h1 id="Let's Start GTD by Todoist"><a href="#Let%27s+Start+GTD+by+Todoist">Let's Start GTD by Todoist</a></h1> <p>本記事では、次の項目について記載しています。</p> <ul> <li>GTDとは?</li> <li>Todoistの整備</li> <li>TodoistでGTDを実施する手順</li> </ul> <h2 id="GTDとは?"><a href="#GTD%E3%81%A8%E3%81%AF%EF%BC%9F">GTDとは?</a></h2> <p><del>Great To Do</del> "Getting Things Done" と呼ばれる、物事をよりよく完遂するための手法(いわゆるタスク管理方法)の1つです。<br /> 何かしたいなーという記憶を、全てTODOリストに書出すことで、脳のメモリリソースを開放し、もっと生産的なことに時間を使おう!というものです。</p> <p>特徴として、下記が挙げられます。</p> <ul> <li>まずタスクをメモ書き(記録)する <ul> <li>そのためには、どんな時でも記録できるものを常に手元に用意する</li> <li>TODOリストに入れるのは、そのあとでも良い</li> </ul></li> <li>タスクを5種類に分ける <ul> <li>インボックス</li> <li>次にとるべき行動</li> <li>連絡待ち</li> <li>プロジェクト</li> <li>いつかやる/多分やる</li> </ul></li> <li>週次レビューで進捗を確認する <ul> <li>1週間に1回、タスクの進捗を確認する</li> </ul></li> </ul> <p>まとめると、以下のような思想です。</p> <ul> <li>したいと思ったことを、まず書出す</li> <li>タスク化の敷居を下げる</li> <li>タスクの優先順序を決める</li> <li>常に管理できるTODOリストを目指す</li> </ul> <h2 id="Todoistの整備"><a href="#Todoist%E3%81%AE%E6%95%B4%E5%82%99">Todoistの整備</a></h2> <p>TodoistでGTDを実施するために、僕が必要だなと思った設定などを、説明します。</p> <h3 id="プロジェクトを追加する"><a href="#%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B">プロジェクトを追加する</a></h3> <p>Todoistの「プロジェクト」機能に、GTDのプロジェクトを追加します。</p> <p>僕は、GTDにおけるプロジェクトというものを、タスクの分類分けとして利用しています。<br /> 例えば、「仕事」「プロジェクトA」「学習」「私事」などです。</p> <h3 id="各プロジェクトにボードを追加する"><a href="#%E5%90%84%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%AB%E3%83%9C%E3%83%BC%E3%83%89%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B">各プロジェクトにボードを追加する</a></h3> <p>各プロジェクトをボード表示にして、以下のボードを、以下の順番でそれぞれのプロジェクトに追加します。</p> <ul> <li>実施予定/実施中/完了</li> <li>連絡待ち</li> <li>いつかしたい</li> </ul> <p>これらは、それぞれGTDの下記に対応します。</p> <ul> <li>次にとるべき行動</li> <li>連絡待ち</li> <li>いつかやる/多分やる</li> </ul> <p>「次にとるべき行動」に「実施予定」を含めているのは、実施予定から実施中に移動するということが、個人的に手間と感じているためです。<br /> 僕は、基本的に各プロジェクトのページを見ることはあまりありません。<br /> そのため、タスクを実施する前に<strong>プロジェクトページの展開</strong>と<strong>タスクのボード間移動</strong>をするのは、正直手間でしかありませんでした。<br /> カンバンなど、チームで複数人でタスクを管理している場合は、誰が今何をしているかを可視化するために、実施予定と実施中を分けることには意味があると思いますが、個人であれば必要ないと思います。</p> <p>また、「次にとるべき行動」に「完了」を含めているのは、チェックを付けると同じボード内の履歴に移動するためです。<br /> ZenHubなどのカンバンツールと異なり、完了したタスクが自動的に完了ボードに移動する、という動作を実装しているTODOリストは多くありません(そもそもボードという概念が多くのTODOリストには無いですね)。<br /> Todoistもご多分に漏れず未実装であるため、完了を実施中と同じボードに配置しています。</p> <p>「いつかやる/多分やる」を「いつかしたい」と言い換えているのは、断定形ではなく希望形にすることで、よりタスク化の敷居を下げることが目的です。<br /> 気分の問題でもあるので、ここはご自由に決めて構いません。<br /> 慣れている人はIceboxと書いてもいいですね。</p> <p>プロジェクトと分けているのは、軸が違うと思ったからです。<br /> 「プロジェクト」はタスク分類であるのに対し、「実施予定/実施中/完了」「連絡待ち」「いつかしたい」はタスクの状態だと思ったため、プロジェクトと各状態を、それぞれ別軸で管理しようと考えました。</p> <h3 id="「タスク確認(土曜日は週次レビュー)」タスクを毎朝の繰返しタスクとして追加する"><a href="#%E3%80%8C%E3%82%BF%E3%82%B9%E3%82%AF%E7%A2%BA%E8%AA%8D%EF%BC%88%E5%9C%9F%E6%9B%9C%E6%97%A5%E3%81%AF%E9%80%B1%E6%AC%A1%E3%83%AC%E3%83%93%E3%83%A5%E3%83%BC%EF%BC%89%E3%80%8D%E3%82%BF%E3%82%B9%E3%82%AF%E3%82%92%E6%AF%8E%E6%9C%9D%E3%81%AE%E7%B9%B0%E8%BF%94%E3%81%97%E3%82%BF%E3%82%B9%E3%82%AF%E3%81%A8%E3%81%97%E3%81%A6%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B">「タスク確認(土曜日は週次レビュー)」タスクを毎朝の繰返しタスクとして追加する</a></h3> <p>「タスク確認(土曜日は週次レビュー)」というタスクを、毎朝の繰返しタスクとして追加します。<br /> このタスクは、その名の通り、その日のタスクを確認する、というタスクです。<br /> このタスクのプロジェクトの分類については、特に決まりは無いと思います。<br /> 僕は「私事」の「実施予定/実施中/完了」に分けていますが、インボックスでも良いかもしれません。</p> <p>朝の時間は、出社予定前など、1日の始まりの時間として設定するといいと思います。<br /> 僕の場合は、基本テレワークであるため、毎朝8:30に設定しています。</p> <p>休日?気にする必要はありません。<br /> その日までに実施すればよいので、時間設定は実はあまり重要ではありません。</p> <h3 id="完了したいタスク数を1に設定する"><a href="#%E5%AE%8C%E4%BA%86%E3%81%97%E3%81%9F%E3%81%84%E3%82%BF%E3%82%B9%E3%82%AF%E6%95%B0%E3%82%921%E3%81%AB%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B">完了したいタスク数を1に設定する</a></h3> <p>Todoistは、1日どれだけタスクを実施できたらゴールか、という指標として「完了したいタスク数」を設定できます。<br /> これを、1に設定します。</p> <p>これは、タスク数で一喜一憂したくなかったことが目的です。<br /> デフォルト値は5なのですが、4つや3つしかタスクをしていない日があったら、まるでその1日が未達成な日であったかのように思ってしまい、地味に傷ついてしまいました。<br /> これを1にすることで、「タスク確認(土曜日は週次レビュー)」タスクさえすれば、必ずゴールできるという素敵仕様になっています。</p> <p>個人的には、GTDを継続する秘訣にもなっているので、騙されたと思ってやってみてください。<br /> 朝一番に「1日のゴールです」と言われるのは、なかなか心に優しいですよ。</p> <h3 id="(有料版の場合)タグを準備する"><a href="#%EF%BC%88%E6%9C%89%E6%96%99%E7%89%88%E3%81%AE%E5%A0%B4%E5%90%88%EF%BC%89%E3%82%BF%E3%82%B0%E3%82%92%E6%BA%96%E5%82%99%E3%81%99%E3%82%8B">(有料版の場合)タグを準備する</a></h3> <p>僕は無料版のため使えませんが、タグを使うと便利だろうなーと思うことはあります。</p> <p>例えば、大枠としてプロジェクトを利用し、副枠としてタグを使うといった、プロジェクトとタグを親子関係で利用すると便利そうです。<br /> 「仕事」プロジェクトの中でタスクを作って、その中で「プロジェクトA」タグと「プロジェクトB」タグを使い分ければ、タスクの見通しが良くなりそうです(今は全部ごっちゃにしています)。</p> <p>有料版は、他にも様々な機能があるため、GTDをもっと続けられたら有料版にしてみようかなと思ってます。</p> <h2 id="TodoistでGTDを実施する手順"><a href="#Todoist%E3%81%A7GTD%E3%82%92%E5%AE%9F%E6%96%BD%E3%81%99%E3%82%8B%E6%89%8B%E9%A0%86">TodoistでGTDを実施する手順</a></h2> <p>では、TodoistでGTDを実施するための手順、および、設定方法などを、以下に記します。</p> <h3 id="タスクリストを充実させる"><a href="#%E3%82%BF%E3%82%B9%E3%82%AF%E3%83%AA%E3%82%B9%E3%83%88%E3%82%92%E5%85%85%E5%AE%9F%E3%81%95%E3%81%9B%E3%82%8B">タスクリストを充実させる</a></h3> <p>最初にGTDをやってみようと思ったら、まずは1時間かけてしたいことを書出すそうです。<br /> 僕は、1時間で思い出せるとは思わなかったので、1週間かけて、やってみたいことを書出しました。<br /> これは、向き不向きがあるので、個人で方法を決めてください。</p> <p>ちなみに、この時点でTodoistを使う必要はありません。<br /> 書出したタスクは、紙やメモアプリなどに記録すれば十分です。</p> <p>説明のため、僕が書出した結果の抜粋を、以下に記します。<br /> もちろん、GTDの実施というタスクも、同じタスクだろうと思って書出しました。</p> <ul> <li>タスク確認(土曜日は週次レビュー)</li> <li>GTDの実施</li> <li>サンスクリットの勉強</li> <li>月1プロジェクト</li> </ul> <p>1週間経つと、タスクもそれなりの量に増えてくるので、タスクリストが充実したら次に進みます。</p> <h3 id="タスクをプロジェクトに分類する"><a href="#%E3%82%BF%E3%82%B9%E3%82%AF%E3%82%92%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%AB%E5%88%86%E9%A1%9E%E3%81%99%E3%82%8B">タスクをプロジェクトに分類する</a></h3> <p>書出したタスクリストが、それぞれどのプロジェクトに該当するかなと想像し、各プロジェクトに移動します。<br /> 最初は未設定のボードに移動するとよいです(後でボード移動する際にわかりやすいため)。</p> <p>僕は、以下のように移動しました。</p> <ul> <li>タスク確認(土曜日は週次レビュー)</li> <li>GTDの実施: 私事</li> <li>サンスクリットの勉強: 学習</li> <li>月1プロジェクト: 仕事</li> </ul> <p>最初は多いため、じっくりプロジェクトを分類しましょう。<br /> この時、新しいプロジェクト分類が見つかったら、新規作成したほうが手っ取り早いです。</p> <h3 id="各プロジェクトのボードに分類する"><a href="#%E5%90%84%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%AE%E3%83%9C%E3%83%BC%E3%83%89%E3%81%AB%E5%88%86%E9%A1%9E%E3%81%99%E3%82%8B">各プロジェクトのボードに分類する</a></h3> <p>タスクリストをプロジェクトに分類し終わったら、各タスクの状態を決めましょう。<br /> 先に書いた通り、タスクの状態は、以下の3つです。</p> <ul> <li>実施予定/実施中/完了</li> <li>連絡待ち</li> <li>いつかしたい</li> </ul> <p>「実施予定/実施中/完了」のタスクは、必ず日時を指定しましょう。<br /> そうしないと、予定にならず「いつかしたい」タスクとの差別化ができません。</p> <p>繰返し実施するタスクは、繰返しタスクとして設定しましょう。<br /> 僕は、毎日より間隔の空く繰返しタスク(隔週、月1などのタスク)については、「連絡待ち」に配置しています。<br /> これは、毎日のタスク確認を少しでも楽にするためです(後述)。</p> <p>なお、ボードに追加する際には、サブタスクである程度のタスク分割をしておくと良いです。<br /> 特に、「実施予定/実施中/完了」に配置したタスクについては、タスク分割をしておくことをオススメします。</p> <p>僕の場合は、以下の通りです。<br /> 可読性向上のため、「実施予定/実施中/完了」は「実施予定」に変えています。</p> <ul> <li>タスク確認(土曜日は週次レビュー): 私事 > 実施予定(繰返し、日時指定済み)</li> <li>GTDの実施: 私事 > 実施予定(日時指定済み) <ul> <li>GTDについて調べる: 私事 > 実施予定(日時指定済み)</li> <li>タスクを書出す: 私事 > 実施予定(日時指定済み)</li> <li>タスクを分類する: 私事 > 実施予定(日時指定済み)</li> <li>1週間続ける: 私事 > 実施予定(日時指定済み)</li> <li>まとめをブログに書く(本記事!): 私事 > 実施予定(日時指定済み)</li> </ul></li> <li>サンスクリットの勉強: 学習 > いつかしたい</li> <li>月1プロジェクト: 仕事 > 連絡待ち(繰返し、日時指定済み)</li> </ul> <p>ちなみに、本節完了時点で、「GTDの実施」タスクのサブタスク上位3つは終わっていることになります。</p> <h3 id="タスク確認タスクを完了する"><a href="#%E3%82%BF%E3%82%B9%E3%82%AF%E7%A2%BA%E8%AA%8D%E3%82%BF%E3%82%B9%E3%82%AF%E3%82%92%E5%AE%8C%E4%BA%86%E3%81%99%E3%82%8B">タスク確認タスクを完了する</a></h3> <p>以上で、TodoistでのGTD実施準備は完了です。<br /> タスクを確認したので、「タスク確認(土曜日は週次レビュー)」をチェックしましょう。</p> <p>はい、今日はゴールできました!<br /> 後は、したいと思っているタスクを順次こなしていけばよいでしょう。</p> <h2 id="GTDを実施するにあたってのTips"><a href="#GTD%E3%82%92%E5%AE%9F%E6%96%BD%E3%81%99%E3%82%8B%E3%81%AB%E3%81%82%E3%81%9F%E3%81%A3%E3%81%A6%E3%81%AETips">GTDを実施するにあたってのTips</a></h2> <p>Todoistで(あるいはそれに限らず)GTDを実践する際に、僕が心がけているTipsを記します。</p> <h3 id="タスクの記録について"><a href="#%E3%82%BF%E3%82%B9%E3%82%AF%E3%81%AE%E8%A8%98%E9%8C%B2%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6">タスクの記録について</a></h3> <p>「タスクの記録」とは、脳で考えていること(記憶)を文字に起こすこと(記録)です。<br /> 記憶は瞬時に消えやすく、思い出すために体力を使うものであるため、できるだけスグに記録することが大切です。<br /> そのため、できるだけ手間のかからない、簡単に記録できることが望ましいです。</p> <p>簡単な方法として、記録方法とタスク管理ツールを別にする、という方法があります。</p> <p>タスク管理ツールは管理するものであるため、なるべく自動で管理しやすいツール(使いこなせるのであれば多機能でも良い)が望ましいです。<br /> 僕は、これをTodoistと捉えました。</p> <p>一方の記録方法ですが、とにかく瞬時に記録できることが望ましいため、人によってはアナログなノートなどもありだと思います。<br /> お風呂場など、今までは記録が難しい場所でも、文明の利器を使うことで、AlexaやGoogleアシスタントなどに記録できます、素晴らしいですね。<br /> 僕は現在、お風呂場については一旦無視しています(本当はもったいない)が、それ以外ではiOSアプリのDraftPadというアプリで記録しています。<br /> とにかく起動が早いため、思ったことを瞬時に記録できます、オススメですよ。</p> <p><a target="_blank" rel="nofollow noopener" href="https://apps.apple.com/jp/app/draftpad/id358067114">‎「DraftPad」をApp Storeで</a></p> <h3 id="タスクの追加方法"><a href="#%E3%82%BF%E3%82%B9%E3%82%AF%E3%81%AE%E8%BF%BD%E5%8A%A0%E6%96%B9%E6%B3%95">タスクの追加方法</a></h3> <p>前述したとおり、タスクを追加する際には、以下のことを実施します。</p> <ul> <li>タスクの記録</li> <li>タスクのプロジェクト分類</li> <li>タスクの状態分類</li> <li>サブタスクでのタスク分割</li> </ul> <p>特に、「実施予定/実施中/完了」に分類するタスクについては、サブタスクでのタスク分割を推奨します。<br /> タスク分割しておくことで、ある程度の見積りが取れますし、それによっていつ実施すべきかも決まりやすいからです。</p> <p>また、Todoistでは、サブタスクにも日時指定ができます。<br /> タスク自体が数日かかる場合などに便利ですので、ぜひ使ってみてください。</p> <h3 id="タスク確認タスクとは?"><a href="#%E3%82%BF%E3%82%B9%E3%82%AF%E7%A2%BA%E8%AA%8D%E3%82%BF%E3%82%B9%E3%82%AF%E3%81%A8%E3%81%AF%EF%BC%9F">タスク確認タスクとは?</a></h3> <p>タスク確認は、毎朝実施すると良いです。</p> <p>「タスク確認(土曜日は週次レビュー)」タスクとは、毎日、もしくは、週1で実施する、TODOリストの見直しタスクです。<br /> 毎日のタスク確認と、週次レビューでは、見る範囲が異なります。</p> <h4 id="タスク確認で見る範囲"><a href="#%E3%82%BF%E3%82%B9%E3%82%AF%E7%A2%BA%E8%AA%8D%E3%81%A7%E8%A6%8B%E3%82%8B%E7%AF%84%E5%9B%B2">タスク確認で見る範囲</a></h4> <p>基本的に、今日のタスクと、各プロジェクトの「実施予定/実施中/完了」ボードのタスクを眺めればよいです。<br /> 眺めてみて、1日に余力がありそうだと思ったら、今日のタスクに「いつかしたい」タスクを入れるのもよいでしょう。</p> <h4 id="週次レビューで見る範囲"><a href="#%E9%80%B1%E6%AC%A1%E3%83%AC%E3%83%93%E3%83%A5%E3%83%BC%E3%81%A7%E8%A6%8B%E3%82%8B%E7%AF%84%E5%9B%B2">週次レビューで見る範囲</a></h4> <p>基本的には、全てのタスクを見直します。<br /> 特に、「いつかしたい」タスクはちゃんと見直しましょう。</p> <p>「いつかしたい」タスクを眺めて、したい欲が高まってきたら、日付を指定して、「実施予定/実施中/完了」に入れると良いです。<br /> 逆に、絶対しないという意思が固まったら、削除するか、「アーカイブ」プロジェクトを用意してそこに入れちゃいましょう。</p> <h1 id="おわりに"><a href="#%E3%81%8A%E3%82%8F%E3%82%8A%E3%81%AB">おわりに</a></h1> <p>この記事が公開されたことで、僕の「GTDの実施」タスクは完了です。</p> <p>GTD、思ったより良い感じです。<br /> このまま続けてみるので、皆さんも挑戦してみてはいかがでしょうか?</p> <p>それでは、よいお年を。</p> Morichan tag:crieit.net,2005:PublicArticle/16198 2020-11-04T00:31:27+09:00 2020-11-04T00:31:27+09:00 https://crieit.net/posts/reading-memo---knowledge-of-product-development 「製品開発の知識」読書メモ <h1 id="TL; DR"><a href="#TL%3B+DR">TL; DR</a></h1> <p>アジャイルでやってこう!</p> <p>メモ書きの割にまとまってないけど、それだけ重要な点が多いってことで許してください。<br /> それくらいには、読んでためになる内容が多かった印象です。</p> <h1 id="はじめに"><a href="#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB">はじめに</a></h1> <p>「製品開発の知識」という書籍(以降、本書と呼びます)の内容要約、および、自身の感想などを記します。</p> <p>本書は、2002年に発売の古い本ですが、2016年には第15版が登場しています。<br /> 今回は、その第15版を読みました(何が違うかは把握できてませんが、多分ここかなーという目星はついた程度です)。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://nikkeibook.nikkeibp.co.jp/item-detail/10862">製品開発の知識 | 日本経済新聞出版</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://www.amazon.co.jp/製品開発の知識-日経文庫-延岡-健太郎/dp/4532108624">製品開発の知識 (日経文庫) | 延岡 健太郎 |本 | 通販 | Amazon</a></li> </ul> <p>本書の要約については、である調で記します。</p> <p>箇条書きについては、次のルールで記述しています。<br /> 簡単に書くと、項目自体についてを太字で、項目の説明を常体で、それぞれ書いていきます。</p> <ul> <li><strong>項目1</strong> <ul> <li><strong>項目1-1</strong> <ul> <li>項目1-1の説明</li> </ul></li> <li><strong>項目1-2</strong></li> </ul></li> <li><strong>項目2</strong> <ul> <li><strong>項目2-1</strong></li> <li><strong>項目2-2</strong> <ul> <li>項目2-2の説明a</li> <li>項目2-2の説明b</li> <li><strong>項目2-2-1</strong></li> <li><strong>項目2-2-2</strong> <ul> <li>項目2-2-2の説明</li> </ul></li> </ul></li> </ul></li> </ul> <h1 id="「製品開発の知識」"><a href="#%E3%80%8C%E8%A3%BD%E5%93%81%E9%96%8B%E7%99%BA%E3%81%AE%E7%9F%A5%E8%AD%98%E3%80%8D">「製品開発の知識」</a></h1> <p>製品開発の現場では、マニュアル的な知識よりも基礎知識の方が重要である。<br /> 本書はヒット商品そのものではなく、ヒット商品を生み出す企業体質についてを記述する。</p> <h2 id="製品価値の役割"><a href="#%E8%A3%BD%E5%93%81%E4%BE%A1%E5%80%A4%E3%81%AE%E5%BD%B9%E5%89%B2">製品価値の役割</a></h2> <p>製品価値の役割は、以下の2点。</p> <h3 id="付加価値創造"><a href="#%E4%BB%98%E5%8A%A0%E4%BE%A1%E5%80%A4%E5%89%B5%E9%80%A0">付加価値創造</a></h3> <p>付加価値の源泉は以下の3点。</p> <ul> <li><strong>顧客にとって高い価値の提供</strong></li> <li><strong>低コストでの提供</strong></li> <li><strong>競合企業に対する優位性の確保(希少価値の提供)</strong></li> </ul> <p>付加価値の高い製品開発により、次の対象に大きく貢献する。</p> <ul> <li><strong>従業員</strong> <ul> <li>給与を潤沢に支払えるため</li> </ul></li> <li><strong>社会</strong> <ul> <li>税金を多く納められるため</li> </ul></li> </ul> <h3 id="企業の将来の担保"><a href="#%E4%BC%81%E6%A5%AD%E3%81%AE%E5%B0%86%E6%9D%A5%E3%81%AE%E6%8B%85%E4%BF%9D">企業の将来の担保</a></h3> <p>以下のバランスが重要。</p> <ul> <li><strong>短期的な視点</strong> <ul> <li>利益および業績の追求</li> </ul></li> <li><strong>長期的な視点</strong> <ul> <li>将来的な競争力を左右する技術/製品開発力の蓄積</li> </ul></li> </ul> <h2 id="製品開発マネジメント"><a href="#%E8%A3%BD%E5%93%81%E9%96%8B%E7%99%BA%E3%83%9E%E3%83%8D%E3%82%B8%E3%83%A1%E3%83%B3%E3%83%88">製品開発マネジメント</a></h2> <p>マネジメントすべき対象は、以下の3点。</p> <h3 id="創造性"><a href="#%E5%89%B5%E9%80%A0%E6%80%A7">創造性</a></h3> <p>以下のバランスが重要。</p> <ul> <li><strong>細かい行動規程</strong></li> <li><strong>自由な発想</strong></li> </ul> <h3 id="複雑性"><a href="#%E8%A4%87%E9%9B%91%E6%80%A7">複雑性</a></h3> <p>複雑性を持つ対象は、以下の通り。</p> <ul> <li><strong>技術</strong></li> <li><strong>開発組織</strong> <ul> <li>社内の人間だけでなく、社外の人間も巻き込む必要がある</li> </ul></li> </ul> <h3 id="不確実性"><a href="#%E4%B8%8D%E7%A2%BA%E5%AE%9F%E6%80%A7">不確実性</a></h3> <p>不確実性を持つ対象は、以下の通り。</p> <ul> <li><strong>市場</strong> <ul> <li><strong>顧客が期待する価値</strong></li> <li><strong>ニーズに関する価値観</strong></li> <li><strong>製品の持つ価値の持続性</strong></li> </ul></li> <li><strong>技術</strong> <ul> <li><strong>技術対象</strong></li> <li><strong>最終的な総コスト</strong></li> </ul></li> </ul> <h2 id="製品開発と競争力"><a href="#%E8%A3%BD%E5%93%81%E9%96%8B%E7%99%BA%E3%81%A8%E7%AB%B6%E4%BA%89%E5%8A%9B">製品開発と競争力</a></h2> <p>差異化の源泉は、以下の通り。</p> <ul> <li><strong>製品</strong> <ul> <li><strong>特定機能</strong></li> <li><strong>勝負軸</strong></li> <li><strong>製品分野</strong></li> </ul></li> <li><strong>製品開発能力</strong> <ul> <li><strong>技術力</strong> <ul> <li>特に、核となる技術を1点に絞る「コア技術戦略」が重要</li> </ul></li> <li><strong>組織プロセス能力</strong> <ul> <li>競合企業よりも短期間/低工数/高品質を実現できる組織力のこと</li> </ul></li> <li><strong>価値創造能力</strong> <ul> <li><strong>製品/市場戦略に関する能力</strong> <ul> <li>顧客ニーズ(特に潜在的なニーズ)に合致した製品を開発する能力のこと</li> </ul></li> <li><strong>独自のビジネス・システムを構築/活用する能力</strong> <ul> <li>複数の企業を巻込んで、1つの製品の開発準備から販売網までのフローを「ビジネス・システム」と呼ぶ</li> <li>そのビジネス・システムをうまく活用することで、独自の販売網構築から業界標準策定までを可能にする</li> </ul></li> </ul></li> </ul></li> </ul> <h2 id="イノベーションのタイプ"><a href="#%E3%82%A4%E3%83%8E%E3%83%99%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E3%82%BF%E3%82%A4%E3%83%97">イノベーションのタイプ</a></h2> <p>イノベーション対象という視点でのタイプは、以下の通り。</p> <ul> <li><strong>市場的革新</strong> <ul> <li>既存技術の組合せが新しいもの</li> </ul></li> <li><strong>技術的革新</strong> <ul> <li><strong>製造技術</strong> <ul> <li>品質や生産効率の向上など</li> </ul></li> <li><strong>製品技術</strong> <ul> <li><strong>アーキテクチャ</strong> <ul> <li>製品要素の組合せなど</li> </ul></li> <li><strong>要素技術</strong> <ul> <li>製品要素そのものの機能向上など</li> </ul></li> </ul></li> </ul></li> </ul> <p>この枠組みを利用する利点は、次の2点。</p> <ul> <li><strong>イノベーションのタイプに応じて戦略が変化し、戦略に応じてPMやメンバーが変化する</strong></li> <li><strong>企業内での製品開発PJの組合せを考えられる</strong> <ul> <li>企業内で、全て一方の革新性を取るような製品開発だけを実施しない</li> </ul></li> </ul> <h2 id="イノベーションの判定"><a href="#%E3%82%A4%E3%83%8E%E3%83%99%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E5%88%A4%E5%AE%9A">イノベーションの判定</a></h2> <p>イノベーションの判定は、以下の2点。</p> <h3 id="イノベーションの基準点"><a href="#%E3%82%A4%E3%83%8E%E3%83%99%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E5%9F%BA%E6%BA%96%E7%82%B9">イノベーションの基準点</a></h3> <p>基準点としては、以下の2点。</p> <ul> <li><strong>市場に存在しなかった技術</strong></li> <li><strong>特定企業が利用できなかった技術</strong> <ul> <li>既にある技術を、他産業の企業が利用できた場合は、イノベーションになりうる</li> </ul></li> </ul> <h3 id="イノベーションの変化量"><a href="#%E3%82%A4%E3%83%8E%E3%83%99%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E5%A4%89%E5%8C%96%E9%87%8F">イノベーションの変化量</a></h3> <p>変化量としては、以下の2点。</p> <ul> <li><strong>機能やコストの変化量の大小</strong></li> <li><strong>特定企業の保持する既存技術のベクトルの方向性の差異</strong> <ul> <li>特定企業が保持している既存技術の応用として対応できない技術を利用できた場合は、イノベーションになりうる</li> <li>既存技術の存在が、新技術の足枷になることもある可能性に注意</li> </ul></li> </ul> <h2 id="イノベーションのパターン"><a href="#%E3%82%A4%E3%83%8E%E3%83%99%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3">イノベーションのパターン</a></h2> <p>イノベーションを起こすためには、以下の2つの戦略に分けられる。</p> <h3 id="改善重視型戦略"><a href="#%E6%94%B9%E5%96%84%E9%87%8D%E8%A6%96%E5%9E%8B%E6%88%A6%E7%95%A5">改善重視型戦略</a></h3> <p>既存機能の改善を重視する戦略。</p> <ul> <li><strong>市場で売れる製品のライフサイクルが短い場合</strong> <ul> <li>機能的には比較的小さな差異でも、新製品を次々に投入することが重要である場合</li> </ul></li> <li><strong>市場/顧客ニーズがわかりにくく、かつ、製品コンセプトが重要な場合</strong> <ul> <li>売上げの予測が立てにくい場合は、改善内容を変えて次々に開発した方が良い</li> <li>必要以上の高頻度な新製品の開発は、投資が過度に増え、在庫管理が大変になることに注意</li> </ul></li> <li><strong>フォロワー戦略を取る場合</strong> <ul> <li>リーダー戦略企業が新市場の開拓や新技術の導入に成功したことを確認した後で、迅速に同様の製品を開発する戦略</li> </ul></li> </ul> <h3 id="革新重視型戦略"><a href="#%E9%9D%A9%E6%96%B0%E9%87%8D%E8%A6%96%E5%9E%8B%E6%88%A6%E7%95%A5">革新重視型戦略</a></h3> <p>既存機能に囚われずイノベーションを重視する戦略。<br /> 基本的には、改善重視型戦略の逆を取る。</p> <ul> <li><strong>市場で売れる製品のライフサイクルが長い場合</strong></li> <li><strong>市場/顧客ニーズがわかりやすい場合</strong></li> <li><strong>技術の優位性を製品のアピールポイントにできる場合</strong></li> <li><strong>技術的に大きな優位性を維持できる場合</strong></li> <li><strong>リーダー戦略を取る場合</strong> <ul> <li>誰よりも早く革新的な製品を開発する戦略</li> </ul></li> </ul> <p>なお、リーダー戦略およびフォロワー戦略は、どちらが良いというわけで無く、それぞれに一長一短が存在する。</p> <h2 id="イノベーションのジレンマ"><a href="#%E3%82%A4%E3%83%8E%E3%83%99%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E3%82%B8%E3%83%AC%E3%83%B3%E3%83%9E">イノベーションのジレンマ</a></h2> <p>イノベーションを生み出すために乗り越えるべきジレンマとして、以下の3つが存在する。</p> <ul> <li><strong>研究開発と製品開発のジレンマ</strong> <ul> <li>初期段階では研究内容の技術や方向性が定まっておらず、投資の多くが無駄になりやすい</li> <li>初期段階では大量生産ができず、量産効果が得られない</li> <li>累積生産量が少なく、学習効果を享受できない</li> </ul></li> <li><strong>技術革新のジレンマ</strong> <ul> <li>革新技術のコストは既存技術のコストより高い</li> <li>既存顧客に革新技術は対応できない場合がある</li> <li>初期段階では革新技術が本当に既存技術より優れていることを判別できない</li> </ul></li> <li><strong>組織のジレンマ</strong> <ul> <li>事業部門の視点と研究開発部門の視点が異なる <ul> <li>事業部門は、比較的短期的な視点から、既存技術より全ての面で優れた新技術の提供を期待する</li> <li>研究開発部門は、長期的な視点から、既存技術より優れた技術を提供できる可能性を提供する</li> </ul></li> </ul></li> </ul> <p>重要な点は、新旧技術の利点欠点を理解しつつ、どちらかを適切なタイミングで意思決定するリーダーの存在である。<br /> 革新的技術の投資は、タイミングを見計って遅すぎない段階に実施する必要がある。<br /> または、競合企業が革新的技術に投資している中、自企業だけ既存技術で優位性を高める戦略もある。</p> <p>なお、日本企業では、イノベーションの多く(特に、破壊的イノベーションの多く)が大企業から生み出されている。<br /> これは、次の2点を象徴している。</p> <ul> <li>日本の大企業における柔軟性に富んだ開発組織能力に裏づけされた強さ</li> <li>大企業を脅かすベンチャー企業の弱さ</li> </ul> <h2 id="製品戦略"><a href="#%E8%A3%BD%E5%93%81%E6%88%A6%E7%95%A5">製品戦略</a></h2> <p>製造業にとって製品戦略は、企業戦略の下位概念ではなく、経営戦略とオーバーラップして考えるべき重要なものである。</p> <h3 id="製品戦略の役割"><a href="#%E8%A3%BD%E5%93%81%E6%88%A6%E7%95%A5%E3%81%AE%E5%BD%B9%E5%89%B2">製品戦略の役割</a></h3> <p>外部環境との関係として重要なステークホルダーは、次の3つである。<br /> 自社を含めて、通称 4C と呼ぶ。</p> <ul> <li><strong>顧客</strong></li> <li><strong>競合企業</strong></li> <li><strong>協力/補完企業</strong></li> </ul> <h3 id="製品戦略の分野"><a href="#%E8%A3%BD%E5%93%81%E6%88%A6%E7%95%A5%E3%81%AE%E5%88%86%E9%87%8E">製品戦略の分野</a></h3> <p>製品戦略の分野は、次の3つに大別できる。</p> <h4 id="製品技術戦略"><a href="#%E8%A3%BD%E5%93%81%E6%8A%80%E8%A1%93%E6%88%A6%E7%95%A5">製品技術戦略</a></h4> <p>短期的な視点。</p> <p>マーケットイン戦略(市場の要求から製品を開発する戦略)より、プロダクトアウト戦略(存在しない市場を生み出す製品を開発する戦略)の方が、最終的に取得できるパイは大きい。</p> <h4 id="製品市場戦略"><a href="#%E8%A3%BD%E5%93%81%E5%B8%82%E5%A0%B4%E6%88%A6%E7%95%A5">製品市場戦略</a></h4> <p>短期的な視点。</p> <ul> <li>選択と集中を徹底し、限られた数の新製品でヒットを狙う戦略</li> <li>多数の新製品を、なるべく小さい投資と低い開発/製造コストで開発する戦略 <ul> <li><strong>マスカスタマイゼーション戦略</strong> <ul> <li>低コスト戦略(標準化した製品として量産効果を享受する戦略)と高付加価値戦略(顧客の要望に全て答えて付加価値を高める戦略)のいいとこ取り</li> <li><strong>部品共通化戦略</strong> <ul> <li>疎結合化することで共通部品を作成し、コストを抑える戦略</li> <li>経営資源や技術や部品までも共通化できることはすると良い</li> </ul></li> <li><strong>高付加価値汎用化戦略</strong> <ul> <li>従業員の半数以上を営業として顧客配属させることで、膨大な顧客情報から共通化できそうな要求を見つけることが可能(キーエンス社の場合)</li> </ul></li> </ul></li> </ul></li> </ul> <h4 id="製品展開戦略"><a href="#%E8%A3%BD%E5%93%81%E5%B1%95%E9%96%8B%E6%88%A6%E7%95%A5">製品展開戦略</a></h4> <p>長期的な視点。</p> <ul> <li><strong>製品ドメイン戦略</strong> <ul> <li>既存技術による市場範囲の拡大、または、既存市場に対する技術範囲の拡大の、どちらかの戦略が存在する</li> <li>既存の製品ドメインから大きく離れすぎた多角化は、成功の確率が低いことが研究で証明済み</li> <li><strong>製品展開マップ</strong> <ul> <li>製品の技術プラットフォーム/製品プラットフォーム/製品ラインの関係を可視化できるフレームワーク</li> <li><strong>技術プラットフォーム</strong> <ul> <li>コア技術と呼ばれるようなもの</li> </ul></li> <li><strong>製品プラットフォーム</strong> <ul> <li>アーキテクチャ(組合せ)</li> </ul></li> </ul></li> </ul></li> </ul> <h2 id="製品開発プロセス"><a href="#%E8%A3%BD%E5%93%81%E9%96%8B%E7%99%BA%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9">製品開発プロセス</a></h2> <p>最初から完璧な設計開発を実現するという発想でプロセスを考えるべきでは無い。</p> <h3 id="製品開発の業務"><a href="#%E8%A3%BD%E5%93%81%E9%96%8B%E7%99%BA%E3%81%AE%E6%A5%AD%E5%8B%99">製品開発の業務</a></h3> <p>製品開発の業務は、以下の5つに大別できる。</p> <h4 id="製品企画"><a href="#%E8%A3%BD%E5%93%81%E4%BC%81%E7%94%BB">製品企画</a></h4> <p>製品コンセプト、技術計画、収益性計画を検討する。<br /> 製品開発終了まで常に参照し、実際とのギャップを埋める必要がある。</p> <p>収益性計画は、原価企画という手法で定めると良い。<br /> 原価企画とは、顧客価値の視点から見た販売価格から、経営戦略上必要とされる利益目標を差し引いた金額(目標コスト)を、製品企画の段階で設定する手法のこと。<br /> 逆に、コストの積上げ式で最終的な販売価格を決めるのは悪手となる(市場での競争力が失われてしまうため)。</p> <h4 id="設計開発と試験/テスト/解析"><a href="#%E8%A8%AD%E8%A8%88%E9%96%8B%E7%99%BA%E3%81%A8%E8%A9%A6%E9%A8%93%EF%BC%8F%E3%83%86%E3%82%B9%E3%83%88%EF%BC%8F%E8%A7%A3%E6%9E%90">設計開発と試験/テスト/解析</a></h4> <p>設計者が設計案を創出する必要がある。<br /> その設計案が実際に目標や製品コンセプトにあっているかを検証する。<br /> この「設計案の創出」と「検証」を繰返すことで、設計は具体化する。</p> <h4 id="要素技術開発"><a href="#%E8%A6%81%E7%B4%A0%E6%8A%80%E8%A1%93%E9%96%8B%E7%99%BA">要素技術開発</a></h4> <p>キーとなる要素技術の開発は、他の要素技術に先駆けて進める必要がある。</p> <h4 id="生産準備"><a href="#%E7%94%9F%E7%94%A3%E6%BA%96%E5%82%99">生産準備</a></h4> <p>製品設計開始前に、生産条件を製品技術者に提示する。<br /> これにより、生産しやすい製品設計が可能となる。</p> <h4 id="開発管理"><a href="#%E9%96%8B%E7%99%BA%E7%AE%A1%E7%90%86">開発管理</a></h4> <p>原価企画によるコスト管理が良い。</p> <h2 id="製品開発の複雑性"><a href="#%E8%A3%BD%E5%93%81%E9%96%8B%E7%99%BA%E3%81%AE%E8%A4%87%E9%9B%91%E6%80%A7">製品開発の複雑性</a></h2> <p>製品開発の複雑性の要素は、次のように分けられる。<br /> イノベーションのタイプと部分的に似ている。</p> <ul> <li><strong>市場/顧客ニーズの複雑性</strong> <ul> <li>顧客ニーズがネットワークの外部性(顧客数によって価値が変わるようなもの)や流行によって変化する場合</li> <li>顧客ニーズが暗黙的で捉えにくい曖昧な性質を持っている場合</li> <li>製品開発によっては、初期から顧客の潜在ニーズを取込む必要がある</li> </ul></li> <li><strong>製品技術の複雑性</strong> <ul> <li><strong>要素技術の複雑性</strong> <ul> <li>技術の新しさ</li> <li>技術開発の内容と機能との因果関係</li> </ul></li> <li><strong>製品アーキテクチャの複雑性</strong> <ul> <li><strong>部品間関係の複雑性</strong> <ul> <li>インターフェイスのモジュール化/標準化の有無</li> <li>インターフェイスの高精度性や緻密性の必要性</li> </ul></li> <li><strong>部品点数の多さ</strong></li> </ul></li> </ul></li> </ul> <h2 id="組織マネジメント"><a href="#%E7%B5%84%E7%B9%94%E3%83%9E%E3%83%8D%E3%82%B8%E3%83%A1%E3%83%B3%E3%83%88">組織マネジメント</a></h2> <p>組織体勢の種類は、以下の通り。</p> <ul> <li><strong>機能重視組織</strong> <ul> <li>専門家を束ねる組織</li> <li>有効的な場面 <ul> <li>特定分野の新技術開発</li> <li>長期プロジェクトに配属する技術者の技術獲得</li> <li>各機能部門の相互依存性が低い場合</li> </ul></li> </ul></li> <li><strong>プロジェクト重視組織</strong> <ul> <li>プロジェクトメンバーを束ねる組織</li> <li>プロジェクトを重視せずに組織を重視している場合は成功しない <ul> <li>組織間に壁があってはならないように、プロジェクトに貢献することで自部門にも利益があることを事業部長や研究所長に理解させる仕組みが必要</li> </ul></li> <li>有効的な場面 <ul> <li>機能横断的にプロジェクトを成功させたい場合</li> <li>短期プロジェクト</li> <li>各機能部門の業務間の相互依存性が高い場合</li> </ul></li> </ul></li> <li><strong>ハイブリッド型組織</strong> <ul> <li>両方のいいとこ取り組織</li> <li>確立方法 <ul> <li>開発メンバーの役割に応じて、機能重視組織とプロジェクト重視組織に分けつつ、両方をミックスする</li> <li>製品開発プロセスのある時点で、機能重視組織からプロジェクト重視組織に変更する</li> </ul></li> </ul></li> </ul> <p>PM の権限については、以下の通り。</p> <ul> <li>プロジェクトの牽引、および、組織としての効率的なプロジェクトの推進のためには、企業のトップが PM を全面的にサポートする必要がある</li> <li>プロジェクトを重視する場合は、 PM もそれに応じて権限を強くする必要がある</li> </ul> <h2 id="製品開発プロセスのマネジメント"><a href="#%E8%A3%BD%E5%93%81%E9%96%8B%E7%99%BA%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%81%AE%E3%83%9E%E3%83%8D%E3%82%B8%E3%83%A1%E3%83%B3%E3%83%88">製品開発プロセスのマネジメント</a></h2> <p>製品開発プロセスのマネジメントをする際に重要となる用語として2点、また、コンカレント・エンジニアリングを機能させるために必要な活動について1点、それぞれ挙げる。</p> <h3 id="コンカレント・エンジニアリング"><a href="#%E3%82%B3%E3%83%B3%E3%82%AB%E3%83%AC%E3%83%B3%E3%83%88%E3%83%BB%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%83%AA%E3%83%B3%E3%82%B0">コンカレント・エンジニアリング</a></h3> <p>製品開発業務の各工程を、並行して実施する開発手法のこと。<br /> 特に設計と生産技術の間における並行化が、製品開発プロ性巣の成否に影響が大きい。</p> <h3 id="フロントローディング"><a href="#%E3%83%95%E3%83%AD%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0">フロントローディング</a></h3> <p>問題解決の前倒し、つまり、後工程で起こりうる問題を、なるべく早期に顕在化させること。<br /> これにより、プロジェクトにおける開発期間短縮、および、工数削減が実現できる。</p> <h3 id="コンカレント・エンジニアリングを機能させるために必要な活動"><a href="#%E3%82%B3%E3%83%B3%E3%82%AB%E3%83%AC%E3%83%B3%E3%83%88%E3%83%BB%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%83%AA%E3%83%B3%E3%82%B0%E3%82%92%E6%A9%9F%E8%83%BD%E3%81%95%E3%81%9B%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AB%E5%BF%85%E8%A6%81%E3%81%AA%E6%B4%BB%E5%8B%95">コンカレント・エンジニアリングを機能させるために必要な活動</a></h3> <p>実際に製品開発プロセスを効率的に促進するためには、関連機能間のコミュニケーションと情報交換が重要である。</p> <h4 id="「生産しやすい設計」ノウハウの蓄積と共有"><a href="#%E3%80%8C%E7%94%9F%E7%94%A3%E3%81%97%E3%82%84%E3%81%99%E3%81%84%E8%A8%AD%E8%A8%88%E3%80%8D%E3%83%8E%E3%82%A6%E3%83%8F%E3%82%A6%E3%81%AE%E8%93%84%E7%A9%8D%E3%81%A8%E5%85%B1%E6%9C%89">「生産しやすい設計」ノウハウの蓄積と共有</a></h4> <p>設計開始前に、生産技術から設計へ、生産要件に関する情報を十分にインプットすることが大切である。<br /> つまり、設計時に守るべきポイントを提示することで、設計に生産技術の要素を組込むことが重要である。</p> <p>この時、失敗事例をデータベース化しておくと良い。</p> <p>ただし、ルールを厳しくしすぎると創造的な設計活動に悪影響をもたらすため、定期的な見直しが必要である。</p> <h4 id="効果的な情報移転の方法"><a href="#%E5%8A%B9%E6%9E%9C%E7%9A%84%E3%81%AA%E6%83%85%E5%A0%B1%E7%A7%BB%E8%BB%A2%E3%81%AE%E6%96%B9%E6%B3%95">効果的な情報移転の方法</a></h4> <p>設計の途中過程であっても、情報を生産技術部門に逐一報告するとよい。<br /> ただし、生産準備が全て無駄になっては意味がないため、未完成であっても有意義な情報である必要がある。</p> <p>チームとして一体感がなければ、責任問題を問われる可能性を恐れて、前段側は情報を出せない。<br /> 共同で問題解決に取組む姿勢が必要となる。</p> <h2 id="企業間関係のマネジメント"><a href="#%E4%BC%81%E6%A5%AD%E9%96%93%E9%96%A2%E4%BF%82%E3%81%AE%E3%83%9E%E3%83%8D%E3%82%B8%E3%83%A1%E3%83%B3%E3%83%88">企業間関係のマネジメント</a></h2> <p>製品開発には複数企業が関わることが一般的になっている。</p> <h3 id="企業間関係のタイプ"><a href="#%E4%BC%81%E6%A5%AD%E9%96%93%E9%96%A2%E4%BF%82%E3%81%AE%E3%82%BF%E3%82%A4%E3%83%97">企業間関係のタイプ</a></h3> <p>企業間関係のタイプには、次の2種類が存在する。</p> <ul> <li><strong>垂直的関係</strong> <ul> <li>製品の上流/下流工程という関係</li> <li>分業化が進んでいる <ul> <li>製造業の組立て受注を専門とする EMS (Electronics Manufacturing Services)</li> <li>半導体設計のみを請負う「ファブレス」</li> <li>半導体生産のみを請負う「ファウンダリ」</li> </ul></li> </ul></li> <li><strong>水平的関係</strong> <ul> <li>競争企業間関係 <ul> <li>製品や技術の共同開発</li> <li>技術供与(ライセンシング)</li> <li>ジョイントベンチャー(合併)</li> <li>競合企業から製品を供給してもらい、自社のブランっで販売する OEM (Original Equipment Manufacturer)</li> </ul></li> <li>重要な課題 <ul> <li>自社の請負範囲</li> <li>自社の企業ネットワーク内での立ち位置</li> <li>他社との関係性の濃淡</li> </ul></li> </ul></li> </ul> <h3 id="外部調達の決定基準"><a href="#%E5%A4%96%E9%83%A8%E8%AA%BF%E9%81%94%E3%81%AE%E6%B1%BA%E5%AE%9A%E5%9F%BA%E6%BA%96">外部調達の決定基準</a></h3> <p>内部で開発/製造する部品を選択する際の観点として、以下の3点を挙げる。</p> <ul> <li><strong>部品の付加価値</strong> <ul> <li>設計/生産することが高い付加価値になるか</li> <li>次の場合は、自社内で実施すべき <ul> <li>顧客への価値が高い</li> <li>企業の強みを反映したコア技術</li> <li>技術の発展性/応用性が高い</li> </ul></li> </ul></li> <li><strong>部品の供給企業</strong> <ul> <li>ある部品を供給する優れた企業が複数あるか</li> <li>次の場合は、自社内で実施すべき <ul> <li>優秀な部品企業の数が少ない</li> </ul></li> </ul></li> <li><strong>部品の設計特性</strong> <ul> <li>その部品が他の部品とどれくらい相互依存性を持つか</li> <li>次の場合は、自社内で実施すべき <ul> <li>他の部品との相互依存性が高い</li> <li>標準化されていない</li> </ul></li> </ul></li> </ul> <h3 id="企業ネットワークの構築"><a href="#%E4%BC%81%E6%A5%AD%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%81%AE%E6%A7%8B%E7%AF%89">企業ネットワークの構築</a></h3> <p>企業ネットワークを構築することで、部品調達が優位になる場合がある。<br /> 取引企業の数によって、それぞれ以下のような優位点がある。</p> <ul> <li><strong>多数企業から調達する優位点</strong> <ul> <li>特定の調達企業への依存度が低下し、取引交渉力が有利になる</li> <li>部品調達の上で柔軟性が増し、より最適な部品を購入できる可能性が上がる</li> <li>1社に依存することにリスクを減らせる</li> </ul></li> <li><strong>少数企業から調達することの優位点</strong> <ul> <li>規模の経済性を期待でき、大量購入によるコスト削減が見込める</li> <li>調整や取引の業務コストを削減できる</li> </ul></li> </ul> <p>基本的に、取引企業は多すぎても少なすぎても良くない。<br /> 基本的には、2〜3社と取引することが最適だと(本書では)考えられている。</p> <h3 id="デザイン・イン"><a href="#%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%BB%E3%82%A4%E3%83%B3">デザイン・イン</a></h3> <p>コンカレント・エンジニアリングの組織プロセスに、部品企業を組込む(製品開発プロジェクトに、部品企業を早期から参加させる)こと。<br /> これにより、手戻り削減が期待できる。</p> <p>デザイン・インを実施するためには、以下の条件が必須である。</p> <ul> <li>部品設計が全く決まっていない初期段階から、部品企業を選択する必要がある</li> <li>部品企業の開発能力が高い必要がある <ul> <li>言われた通りに作るだけではダメ</li> </ul></li> <li>自社とその部品企業が相互に信頼している必要がある <ul> <li>部品企業が競合企業に情報を漏洩されては困る</li> <li>自社が部品企業の部品設計データを粗悪に扱ってはならない</li> </ul></li> <li>綿密なコミュニケーショが実施できるインフラが必要である</li> </ul> <p>かつての欧米企業では、調達供給関係である企業は疑心暗鬼の関係であった。<br /> そのため、デザイン・インの考え方は、欧米企業では一般的ではなかったが、近年では取入れている企業が増えている。</p> <h2 id="持続的な製品開発能力の構築"><a href="#%E6%8C%81%E7%B6%9A%E7%9A%84%E3%81%AA%E8%A3%BD%E5%93%81%E9%96%8B%E7%99%BA%E8%83%BD%E5%8A%9B%E3%81%AE%E6%A7%8B%E7%AF%89">持続的な製品開発能力の構築</a></h2> <p>優れた製品開発能力とは、自由と規律、コストと付加価値、繊毛性と統合性、といった、矛盾する目標を高次元で統合的に解決する仕組みによって成立つ。</p> <h3 id="相反する要素"><a href="#%E7%9B%B8%E5%8F%8D%E3%81%99%E3%82%8B%E8%A6%81%E7%B4%A0">相反する要素</a></h3> <p>相反する要素の組合せ、および、解決策は、以下の通り。</p> <ul> <li><strong>自由と規律</strong> <ul> <li>これらの関係は、本質的に相反するものではなく、むしろ補完的なものとして考えることが大事である</li> <li><strong>自由</strong> <ul> <li>技術開発が失敗しても責められない環境</li> <li>上司は技術者が提案した新しいアイデアを決して潰してはならないと言う文化</li> </ul></li> <li><strong>規律</strong> <ul> <li>そもそも開発してよい内容に制限がかかっている</li> </ul></li> </ul></li> <li><strong>コストと付加価値</strong> <ul> <li><strong>コスト</strong> <ul> <li>共通化によるコスト削減</li> <li>優れたサプライチェーンによる他社との関係の良好化</li> </ul></li> <li><strong>付加価値</strong> <ul> <li>受注生産によるカスタマイズ</li> </ul></li> </ul></li> <li><strong>専門性と統合</strong> <ul> <li>部門横断プロジェクトの効果的な活用によって、専門技術部門とプロジェクトを組合せることができる</li> <li>部門横断プロジェクトによる製品開発の成功体験の積重ねが大切である</li> </ul></li> <li><strong>オープン化と信頼構築</strong> <ul> <li>この2つのトレードオフの打破が求められている。 <ul> <li>グローバルな視点から最適なパートナーを、戦略的に取捨選択する</li> <li>緊密な信頼関係によるデザイン・インを、効果的に実行する</li> </ul></li> </ul></li> </ul> <h3 id="企業例"><a href="#%E4%BC%81%E6%A5%AD%E4%BE%8B">企業例</a></h3> <p>二律背反を高度な視点から解決できた企業の例を、以下に示す。</p> <ul> <li>シャープ <ul> <li>重要な技術開発や新製品開発の組織横断プロジェクト化「緊プロ」 <ul> <li>25年に渡るプロジェクト組織の広範囲化による部門間の壁の破壊</li> </ul></li> </ul></li> <li>トヨタ自動車 <ul> <li>競合他社への部品供給の推奨、および、系列に拘らない最新技術の共同研究先企業の選定 <ul> <li>系列企業との緊密な信頼関係によるグループ企業間での相互学習を促進する仕組みの構築</li> <li>製品開発における広範なネットワークの構築</li> </ul></li> </ul></li> <li>シスコ・システムズ <ul> <li>多くのベンチャー企業の買収 <ul> <li>ベンチャー企業の活力や革新技術</li> <li>大企業の開発組織や顧客開拓力</li> </ul></li> </ul></li> </ul> <h3 id="今後特に注目される視点"><a href="#%E4%BB%8A%E5%BE%8C%E7%89%B9%E3%81%AB%E6%B3%A8%E7%9B%AE%E3%81%95%E3%82%8C%E3%82%8B%E8%A6%96%E7%82%B9">今後特に注目される視点</a></h3> <p>本書が、2002年当時(から2016年までの間)に注目している視点は、以下の通り。</p> <ul> <li>企業外部の技術力の獲得</li> <li>情報技術による製品開発の仕組みの根本的な改革</li> </ul> <h1 id="おわりに"><a href="#%E3%81%8A%E3%82%8F%E3%82%8A%E3%81%AB">おわりに</a></h1> <p>全体的に、ソフトウェア開発ではアジャイルに相当することを、ハードウェアでも実施することが望ましいということが言われていました。<br /> が、これは新製品開発での話である、という前提を考慮すれば、そうでない場合(いわゆる保守/運用)ではどうすべきか、については書いてないと言えますね。</p> <p>製品開発を会社として本気で取組むためには、会社の文化から変えていかないといけないみたいです。<br /> そこまでちゃんと取組めている会社がどれだけあるのか......?という疑問は残りますが、企業選択の時点では考えるべき観点の1つかもしれません(就職/転職しかり、株式購入しかり)。</p> <p>また、保守運用チームと新製品開発チームを併用している会社の場合(今の多くの企業はそういう感じな気がしますが)、どのように両立させると良いか、気になりました。<br /> 保守運用チームと新製品開発チームの両方が Win-Win になるためには、「ハイブリット型組織」が生かせるような、そうでもないような......</p> <p>それと、営業チームと開発チームとの関係について、ほとんど書いてなかった点が気になりました。<br /> そこが知りたいところでもあるのですが、製品開発に営業はいらないってことなのでしょうか?<br /> いや、そんなことはないはず......</p> <p>後、本書でチラッと書いてましたが、デファクト・スタンダードの対義語はデジューリ・スタンダードというらしいです。</p> Morichan tag:crieit.net,2005:PublicArticle/16170 2020-10-25T04:17:51+09:00 2020-10-25T04:17:51+09:00 https://crieit.net/posts/galaxy-angel-on-windows-10 Galaxy Angel(無印)を 64bit の Windows 10で動かす際のTips <h1 id="TL; DR"><a href="#TL%3B+DR">TL; DR</a></h1> <p>異常にもっさりしてしまいのは、対象 DirectX が古く、 FPS が早くなりすぎるのが原因です。<br /> FPS を60に固定化することで、解決できます。</p> <p>本記事の内容は、あくまで自己責任でお願いします。<br /> ゲームの動作対象外であるため、万が一のことがあっても僕は責任を持てません。</p> <h1 id="はじめに"><a href="#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB">はじめに</a></h1> <p>かつて一世を風靡した、 Galaxy Angel をご存知でしょうか?<br /> ブロッコリーによる、キャラクターメディアミックス企画 Project G.A. のゲーム版第1作品です。<br /> 通称、 GA (無印)と呼びます。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://www.broccoli.co.jp/ga/game/ga/index.html">GALAXY ANGEL</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://www.broccoli.co.jp/ga/">Project G.A. Official Website</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://www.broccoli.co.jp/">株式会社ブロッコリー</a></li> </ul> <p>アニメ版ではコミカルギャグ調一辺倒、ゲーム版ではシリアス一辺倒と、作風/キャラの性格/背景などがまるで違う作品として、後世に多大な影響を与えたシリーズとして有名ですよね?(同調圧力)</p> <p><a target="_blank" rel="nofollow noopener" href="https://dic.nicovideo.jp/a/ギャラクシーエンジェル">ギャラクシーエンジェルとは (ギャラクシーエンジェルとは) [単語記事] - ニコニコ大百科</a></p> <p>ゲーム版では、 ADV(アドベンチャー)パート/艦内移動パート/ SLG(シミュレーション)パートの3つで構成されています。<br /> この中でも SLG パートは、 DirectX をゴリゴリ駆使したであろう、 3D で宇宙空間を舞う戦闘機を自在に操作できるシステムであり、個人的に一番オススメできる部分です。<br /> 特に通常戦闘時の BGM が良い!</p> <p><a target="_blank" rel="nofollow noopener" href="https://www.broccoli.co.jp/ga/game/ga/intro/index.html">INTRODUCTION | GALAXY ANGEL</a></p> <p>PC ゲームとして 2002 年に発売した今作は、当然ながら動作確認環境は Windows 98 以上、 DirectX 8.1 以上と古く、64bit 版 Windows 10 での動作は想定されていません。</p> <p>しかし、僕は何としてでも、このゲームを、特に SLG パートを、いま遊びたいと思いました。<br /> その際に、引っかかった点と解決策を、それぞれ記します。</p> <h1 id="Galaxy Angel(無印)を Windows 10 で遊ぶための軌跡"><a href="#Galaxy+Angel%EF%BC%88%E7%84%A1%E5%8D%B0%EF%BC%89%E3%82%92+Windows+10+%E3%81%A7%E9%81%8A%E3%81%B6%E3%81%9F%E3%82%81%E3%81%AE%E8%BB%8C%E8%B7%A1">Galaxy Angel(無印)を Windows 10 で遊ぶための軌跡</a></h1> <p>GA(無印)を Windows 10 で遊ぶためには、次の作業が必要です。<br /> 調べてから知ったんですが、このゴリゴリ 3D ゲームを CD に突っ込んでたんですね......</p> <ol> <li>CD-ROM でのインストール</li> <li>修正パッチの適用 <ul> <li><a target="_blank" rel="nofollow noopener" href="https://www.broccoli.co.jp/ga/game/ga/faq/index.html">FAQ | GALAXY ANGEL</a></li> </ul></li> <li>ゲーム起動準備</li> <li>ゲーム起動</li> </ol> <p>本記事では、ゲーム起動準備についてのみ説明します。<br /> インストールと修正パッチ適用はできたものとして、以降の内容を読んでください。</p> <h2 id="全画面強制起動を止める"><a href="#%E5%85%A8%E7%94%BB%E9%9D%A2%E5%BC%B7%E5%88%B6%E8%B5%B7%E5%8B%95%E3%82%92%E6%AD%A2%E3%82%81%E3%82%8B">全画面強制起動を止める</a></h2> <p><strong>起動すると厄介な問題が後に控えているので、全画面強制起動を確認したい場合は、次節での FPS 設定を終わらせてからにしましょう。</strong></p> <hr /> <p>インストールした <code>GA.exe</code> をダブルクリックすると、全画面でゲームを起動してしまいます。<br /> 今時 PC ゲームで全画面強制なんてまず無いですが、昔のゲームあるあるですね。</p> <p>これを防ぐには、ショートカットを作成します。</p> <p>まず、<code>GA.exe</code> をコピーして、適当なディレクトリ(一般的にはデスクトップでしょうか?)に右クリックで「ショートカットの貼り付け」を選択すれば、ショートカットを生成します。</p> <p>次に、生成したショートカットを(ダブルクリックではなく)クリックで選択し、右クリックで「プロパティ」を選択すると、ショートカットファイルのプロパティ画面を表示します。</p> <p>そして、「ショートカット」タブを選択し、「リンク先」の項目の最後に <code>-w</code> を入力して「OK」を押してください。</p> <ul> <li>before: <code>"C:\Program Files (x86)\BROCCOLI\GalaxyAngel\GA.exe"</code></li> <li>after: <code>"C:\Program Files (x86)\BROCCOLI\GalaxyAngel\GA.exe" -w</code></li> </ul> <p>以上で、設定は完了です。<br /> ショートカットをダブルクリックすると、ウィンドウ表示でゲームが始まります。</p> <h2 id="FPS を固定化する"><a href="#FPS+%E3%82%92%E5%9B%BA%E5%AE%9A%E5%8C%96%E3%81%99%E3%82%8B">FPS を固定化する</a></h2> <p>一度、ショートカットをダブルクリックしてみてください。<br /> 「にゅにゅにゅにゅにゅ、ブロッコリーにゅ」というデジコの声と共に、映像が流れると思います。</p> <p><a target="_blank" rel="nofollow noopener" href="https://www.broccoli.co.jp/dejiko/">Di Gi Charat Official WebSite でじこのへや</a></p> <p>問題は、そのあと、真っ白な画面がしばらく続きながら、BGMだけ流れている状態になってしまう点です。<br /> これは、ゲーム画面描画が異常に遅いだけで、1分ほど待機すれば、起動画面が表示されます。</p> <p>何故かわかりませんが、他のウィンドウやデスクトップなどをクリックすると(ゲームウィンドウを非アクティブ化すると)、描画がスムーズになります。</p> <p>これは、対象 DirectX が古すぎて、 FPS を固定化できていないことが原因のようです。<br /> 以前調べた時は、 FPS が 240 くらいになっていました。</p> <p><a target="_blank" rel="nofollow noopener" href="https://twitter.com/i/events/867731235388375041">dmm版ギャラクシーエンジェル Windows10でのウィンドウモードプレイの仕方まとめ / Twitter</a></p> <p>これを解決する方法の1つに、 DEC と呼ばれるツールを利用する方法があります。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://seesaawiki.jp/wawawagames/d/FPS%C0%A9%B8%C2%A4%CE%CF%C3">FPS制限の話 - わわわゲームズ</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://web.archive.org/web/20100722002817/http://secondtime.ddo.jp/blog/page_dec/">Secondtime - DEC</a></li> </ul> <p>DEC の入った ZIP ファイルをダウンロード/解凍し、中身を GA(無印)が入ったディレクトリに置いちゃいましょう。<br /> 既定では、ウィンドウ画面の左上に、 60 FPS で固定化している様子を表示しているはずです。</p> <p>これで、設定完了です!<br /> ショートカットをダブルクリックし、ゲームを楽しみましょう!</p> <h1 id="おわりに"><a href="#%E3%81%8A%E3%82%8F%E3%82%8A%E3%81%AB">おわりに</a></h1> <p>僕には大事な情報ですから、記録のために書いておきました。<br /> ご興味がある方や、手元に CD が残っている方は、ぜひ楽しみましょう。</p> <hr /> <p>DMM 版もあると聞いて調べたんですけど、今はもうリンクが切れてるため、おそらく販売停止ぽいですね、残念......</p> <p><a target="_blank" rel="nofollow noopener" href="https://togetter.com/li/508840">ギャラクシーエンジェル PC版について。 - Togetter</a></p> Morichan tag:crieit.net,2005:PublicArticle/16159 2020-10-20T14:04:20+09:00 2020-10-20T14:04:20+09:00 https://crieit.net/posts/username-filename-userName-file-name username や filename は、これから区切ろうと思う(userName や file_name としようと思う) <h1 id="TL; DR"><a href="#TL%3B+DR">TL; DR</a></h1> <p>区切らない場合、属性が追加される際に面倒になると思いました(実際なりました)。</p> <h1 id="はじめに"><a href="#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB">はじめに</a></h1> <p><code>username</code> とか <code>filename</code> を区切らない派でしたが、今日から区切る派(<code>userName</code>, <code>file_name</code> などと命名する派閥)になろうと思います。</p> <h1 id="区切る派に変更した理由"><a href="#%E5%8C%BA%E5%88%87%E3%82%8B%E6%B4%BE%E3%81%AB%E5%A4%89%E6%9B%B4%E3%81%97%E3%81%9F%E7%90%86%E7%94%B1">区切る派に変更した理由</a></h1> <p>急に新しい name 属性が増えた際に、対応が面倒だと気づいてしまいました。</p> <h2 id="例1"><a href="#%E4%BE%8B1">例1</a></h2> <p><code>username</code> (ユーザー名)属性が存在する際に、「ユーザー表示名」属性が必要になった場合、 <code>userDisplayName</code> と <code>username</code> が併存しているのは気持ち悪いです。<br /> かといって、 <code>displayname</code> は長すぎて、個人的には区切りたい欲が強くなりますが、その場合は <code>displayName</code> と <code>username</code> が併存するため、やっぱり気持ち悪いです。</p> <h2 id="例2"><a href="#%E4%BE%8B2">例2</a></h2> <p><code>filename</code> (ファイル名)属性が存在する際に、「入力ファイル名」属性が必要になった場合、区切りとして <code>input_filename</code> は違和感があります。<br /> かといって <code>input_file_name</code> と <code>filename</code> が併存しているのは気持ち悪いです。</p> <h1 id="おわりに"><a href="#%E3%81%8A%E3%82%8F%E3%82%8A%E3%81%AB">おわりに</a></h1> <p>命名は難しいですね。</p> Morichan tag:crieit.net,2005:PublicArticle/16110 2020-10-05T00:21:23+09:00 2020-10-05T00:23:06+09:00 https://crieit.net/posts/Qrunch-5f79e8736ed60 Qrunch から Crieit に引越しする <h1 id="TL; DR"><a href="#TL%3B+DR">TL; DR</a></h1> <p>Qrunch から引越しました。</p> <h1 id="はじめに"><a href="#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB">はじめに</a></h1> <p>Qrunch がサービス終了することになり、引越し先を決めなければならなくなりました。</p> <p>一旦、 Crieit に移行することにし、 Qrunch との違いなどを記載しようと思います。</p> <h1 id="引越し手順"><a href="#%E5%BC%95%E8%B6%8A%E3%81%97%E6%89%8B%E9%A0%86">引越し手順</a></h1> <p>以下の手順で、手動で引越しします。</p> <ol> <li>Qrunch 記事のエクスポート</li> <li>Crieit への記事追加(下書き)</li> <li>下書き記事の公開</li> <li>Qrunch 記事のカノニカル設定付与</li> </ol> <h2 id="Qrunch 記事のエクスポート"><a href="#Qrunch+%E8%A8%98%E4%BA%8B%E3%81%AE%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%9D%E3%83%BC%E3%83%88">Qrunch 記事のエクスポート</a></h2> <p>Qrunch の記事をエクスポートし、Markdown 形式のテキストファイルをダウンロードします。</p> <h2 id="Crieit への記事追加(下書き)"><a href="#Crieit+%E3%81%B8%E3%81%AE%E8%A8%98%E4%BA%8B%E8%BF%BD%E5%8A%A0%EF%BC%88%E4%B8%8B%E6%9B%B8%E3%81%8D%EF%BC%89">Crieit への記事追加(下書き)</a></h2> <p>エクスポートした記事ファイルから、次の3つを移行します。</p> <ul> <li>記事本文</li> <li>記事タイトル</li> <li>タグ/カテゴリ</li> </ul> <p>下書きとして全17記事を保存します。</p> <h2 id="下書き記事の公開"><a href="#%E4%B8%8B%E6%9B%B8%E3%81%8D%E8%A8%98%E4%BA%8B%E3%81%AE%E5%85%AC%E9%96%8B">下書き記事の公開</a></h2> <p>下書き記事を、順次公開します。<br /> 公開するごとに URL を記録しておきます。</p> <h2 id="Qrunch 記事のカノニカル設定付与"><a href="#Qrunch+%E8%A8%98%E4%BA%8B%E3%81%AE%E3%82%AB%E3%83%8E%E3%83%8B%E3%82%AB%E3%83%AB%E8%A8%AD%E5%AE%9A%E4%BB%98%E4%B8%8E">Qrunch 記事のカノニカル設定付与</a></h2> <p>Crieit に公開した記事の URL を、 Qrunch 記事のカノニカル設定 URL に付与します。<br /> カノニカル設定をすることで、 Qrunch の記事購読者の流出防止を期待してます(正しい使い方なのかは分かりませんが......)。</p> <p>Qrunch の記事は 2020/10/4 まで編集可能であったため、それまでに何としてでもこれを設定したかったです。</p> <h1 id="Tips"><a href="#Tips">Tips</a></h1> <p>単純に移行は、やはりできませんでした。<br /> そのため、いくつか移行時にコツがあるため、それについて記載します。</p> <h2 id="Qrunch 記事の絵文字が一部正常にエクスポートできない"><a href="#Qrunch+%E8%A8%98%E4%BA%8B%E3%81%AE%E7%B5%B5%E6%96%87%E5%AD%97%E3%81%8C%E4%B8%80%E9%83%A8%E6%AD%A3%E5%B8%B8%E3%81%AB%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%9D%E3%83%BC%E3%83%88%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84">Qrunch 記事の絵文字が一部正常にエクスポートできない</a></h2> <p>Qrunch の記事として記載していた絵文字が、一部正常にエクスポートできませんでした。<br /> こちらは、単純に記述すれば問題ありません。</p> <h2 id="Crieit のコード記述 Markdown でコードタイトルが記述できない"><a href="#Crieit+%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%89%E8%A8%98%E8%BF%B0+Markdown+%E3%81%A7%E3%82%B3%E3%83%BC%E3%83%89%E3%82%BF%E3%82%A4%E3%83%88%E3%83%AB%E3%81%8C%E8%A8%98%E8%BF%B0%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84">Crieit のコード記述 Markdown でコードタイトルが記述できない</a></h2> <p>Crieit のコード記述 Markdown は、コードタイトルが記述できません。</p> <p>この問題に気づいたのは、記事を公開してからです。<br /> 記事記述中のプレビューと、記事公開時の画面では、表示が異なっていました。<br /> コードタイトルを記述している場合、正常にコード表示できません。</p> <p>しかも、 Markdown の構文解析を常時実施しているわけではなさそうで、一部だけコードのように記述される場合があるなど、表示させるためには多少のコツが必要っぽいです。</p> <h2 id="Qrunch のタグとカテゴリを合わせる必要がある"><a href="#Qrunch+%E3%81%AE%E3%82%BF%E3%82%B0%E3%81%A8%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA%E3%82%92%E5%90%88%E3%82%8F%E3%81%9B%E3%82%8B%E5%BF%85%E8%A6%81%E3%81%8C%E3%81%82%E3%82%8B">Qrunch のタグとカテゴリを合わせる必要がある</a></h2> <p>Qrunch には、タグとカテゴリの2種類が存在しました。<br /> 当然、 Crieit にはタグの1種類しか存在しないため、合わせる必要があります。</p> <h2 id="Crieit のタグはコピペで設定できない"><a href="#Crieit+%E3%81%AE%E3%82%BF%E3%82%B0%E3%81%AF%E3%82%B3%E3%83%94%E3%83%9A%E3%81%A7%E8%A8%AD%E5%AE%9A%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84">Crieit のタグはコピペで設定できない</a></h2> <p>Crieit のタグは空白文字区切りでないため、エクスポートファイルのタグ表示欄を単純にコピペはできません。<br /> コピペする場合、1タグごとにコピペする必要があります。</p> <h1 id="おわりに"><a href="#%E3%81%8A%E3%82%8F%E3%82%8A%E3%81%AB">おわりに</a></h1> <p>永住の地が無いことは承知の上ですが、一旦はこれで腰を落ち着かせようと思います。<br /> 使い勝手が違うため、いろいろ間違っているかもしれませんが、ご了承ください。</p> Morichan tag:crieit.net,2005:PublicArticle/16109 2020-10-04T23:29:37+09:00 2020-10-04T23:44:28+09:00 https://crieit.net/posts/PowerShell-Git-reset-stash PowerShell で Git の reset/stash などを使う際に履歴を指定する方法 <p>本記事は、 Qrunch からの移転記事です。</p> <p>移転元: <a target="_blank" rel="nofollow noopener" href="https://morichan.qrunch.io/entries/gDTuDEwe0dme8qkN">PowerShell で Git の reset/stash などを使う際に履歴を指定する方法 - 雑木林</a></p> <h1 id="TL; DR"><a href="#TL%3B+DR">TL; DR</a></h1> <p>中括弧で表記する文字列は <code>'</code> で囲みましょう。</p> <h1 id="はじめに"><a href="#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB">はじめに</a></h1> <p>みなさんおなじみ、履歴を戻すコマンドは、下記の通りです。</p> <p>gitで履歴を戻すコマンド(実行不可)</p> <pre><code class="powershell">git reset HEAD@{0} </code></pre> <p>また、スタッシュを適用するコマンドは、下記の通りです。</p> <p>gitでスタッシュを適用するコマンド(実行不可)</p> <pre><code class="powershell">git stash pop stash@{0} </code></pre> <p>しかし、 PowerShell で上記を実行しようとすると、次のエラーが発生し、履歴リセット/スタッシュ適用できません。</p> <p>PowerShellで履歴を戻そうとした際のエラー</p> <pre><code class="powershell">error: unknown switch `e' </code></pre> <h1 id="解決策"><a href="#%E8%A7%A3%E6%B1%BA%E7%AD%96">解決策</a></h1> <p>PoserShell では、中括弧に特別な意味があるため(スクリプトブロックと呼ぶらしい)、中括弧内の文字列をコマンドとして実行してしまうからみたいです。</p> <p><a target="_blank" rel="nofollow noopener" href="https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_script_blocks?view=powershell-7">about_Script_Blocks - PowerShell | Microsoft Docs</a></p> <p><code>'</code> で囲み文字列化することで、実行できます。</p> <p>gitで履歴を戻すコマンド(文字列化)</p> <pre><code class="powershell">git reset 'HEAD@{0}' </code></pre> <p>gitでスタッシュを適用するコマンド</p> <pre><code class="powershell">git stash pop 'stash@{0}' </code></pre> <p>または、中括弧エスケープ処理をすることでも可能です。<br /> PowerShell のエスケープシーケンスは <code>`</code> ですよね。</p> <p>gitで履歴を戻すコマンド(エスケープ処理)</p> <pre><code class="powershell">git reset HEAD@`{0`} </code></pre> <p><a target="_blank" rel="nofollow noopener" href="https://github.com/dahlbyk/posh-git/issues/106">git reset HEAD@{1} results in error · Issue #106 · dahlbyk/posh-git</a></p> <h1 id="おわりに"><a href="#%E3%81%8A%E3%82%8F%E3%82%8A%E3%81%AB">おわりに</a></h1> <p>エラー文だけでは理解できず、地味に苦労しました。<br /> PowerShell は <del>めんどくさい</del> 奥が深いですね。</p> Morichan tag:crieit.net,2005:PublicArticle/16108 2020-10-04T23:28:17+09:00 2021-11-29T13:41:31+09:00 https://crieit.net/posts/UML-5f79dc014a829 実践UML記述法:ユースケース図におけるユースケース間の関係の書き方を疑似コードから逆変換して考える <p>本記事は、 Qrunch からの移転記事です。</p> <p>移転元: <a target="_blank" rel="nofollow noopener" href="https://morichan.qrunch.io/entries/XRfxn2KmER0Skcvp">実践UML記述法:ユースケース図におけるユースケース間の関係の書き方を疑似コードから逆変換して考える - 雑木林</a></p> <h1 id="TL; DR"><a href="#TL%3B+DR">TL; DR</a></h1> <p>ユースケース図の <code>include</code> および <code>extends</code> は、それぞれメソッドおよび <code>if</code> 文が真の場合のメソッドに変換できます。<br /> また、拡張点は <code>if</code> 文の真偽値判定に変換できます。</p> <h1 id="本題:ユースケース図におけるユースケース間の関係の書き方を疑似コードから逆変換して考える"><a href="#%E6%9C%AC%E9%A1%8C%EF%BC%9A%E3%83%A6%E3%83%BC%E3%82%B9%E3%82%B1%E3%83%BC%E3%82%B9%E5%9B%B3%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E3%83%A6%E3%83%BC%E3%82%B9%E3%82%B1%E3%83%BC%E3%82%B9%E9%96%93%E3%81%AE%E9%96%A2%E4%BF%82%E3%81%AE%E6%9B%B8%E3%81%8D%E6%96%B9%E3%82%92%E7%96%91%E4%BC%BC%E3%82%B3%E3%83%BC%E3%83%89%E3%81%8B%E3%82%89%E9%80%86%E5%A4%89%E6%8F%9B%E3%81%97%E3%81%A6%E8%80%83%E3%81%88%E3%82%8B">本題:ユースケース図におけるユースケース間の関係の書き方を疑似コードから逆変換して考える</a></h1> <p>UMLのダイアグラムの1つに、ユースケース図というものがあります。<br /> ユースケース図とは、ステークホルダーとシステムの関係を、簡易的に図として表現するものです。</p> <p>以下のような図を、人生で1度は見たことがあるはずです。</p> <p><img src="http://www.plantuml.com/plantuml/png/ZPBVIiCm5CRlynIXLtgnFe2CiZSPfOqrq3KboLGGmIHEb0r47KFnGl3FS0n46IB-UPjZSNiBapbRsPKtXt3ExtmVvoCD8KCkswqKIIfJWek3bsd_kNWR5uUZh_xzTAy3wW7C4Cm7w5VGJp-FudA2K4hM9POCSvfiI1nJJY99MOPG64d6iLTAU3WKk2q8HyWnOPRyTS8x2Bjf50g21P5DAadBRNYpcwlYJ84-BJfte7kWkvQirMgsacr9Cc7TSCve9eLjBMWr1ZC2Oy3qmKn0FuBgVRwVWze7DNHLTprBhrJYnmFRMtMEoSBTpS4SWRwsyzcW2-ha5s4voPenOzmnoqvMx7O0wc9ESj9YcwIvnSCyfrc2S7MSxmUL45x3zJhDehGTao2mMF8_h5Ih-_wosHoUPnHRTXSXbxwDBYYtgavvTCFIzYTy0m00" alt="冷蔵庫利用者のユースケース図" /></p> <pre><code class="plantuml">@startuml title 冷蔵庫利用者のユースケース図 left to right direction actor "利用者" as user rectangle 冷蔵庫 { usecase set_item as "食品を入れる --- extension points 食品にラッピングが付いている" (食品を取る) as get_item (ドアを開ける) as open_door (ラッピングを外す) as remove_wrapping set_item ..> open_door : <<include>> get_item ..> open_door : <<include>> set_item <.. remove_wrapping : <<extend>> } user --> set_item user --> get_item @enduml </code></pre> <h1 id="問題点"><a href="#%E5%95%8F%E9%A1%8C%E7%82%B9">問題点</a></h1> <p>ここで、よく混乱するのが <code>include</code> および <code>extend</code> の意味、および、矢印の向きです。</p> <p><code>include</code> は、あるユースケースは別のユースケースを包含している、という意味を表します。</p> <blockquote> <p>ユースケースBの中には、ユースケースAが含まれていることを示します。<br /> 「has a」関係、つまり、「ユースケースB has a ユースケースA」の関係が成り立ちます。</p> </blockquote> <p><code>extend</code> は、あるユースケースが別のユールケースを拡張する、という意味を表します。</p> <blockquote> <p>ユースケースAに対して、機能を追加するようなユースケースBの関係を示します。</p> </blockquote> <p><a target="_blank" rel="nofollow noopener" href="http://www.itsenka.com/contents/development/uml/usecase.html">ユースケース図(Use Case Diagram) - UML入門 - IT専科</a></p> <p>この包含と拡張、という単語の違いは、個人的には非常に理解が難しかったです。<br /> それにより、以下の疑問が顕在化します。</p> <ul> <li>どのように <code>include</code> と <code>extend</code> を使い分けるのか</li> <li>なぜ <code>extend</code> の矢印の向きは <code>include</code> と逆なのか</li> </ul> <p>しかし、下記ページにより、長年の疑問が解けたので、解説しようと思います。</p> <p><a target="_blank" rel="nofollow noopener" href="http://architect360.apricot-jp.com/400/includeextend.html">ユースケース図のincludeとextend:アーキテクト360</a></p> <h1 id="解決策"><a href="#%E8%A7%A3%E6%B1%BA%E7%AD%96">解決策</a></h1> <p>エンジニアは、図で理解するより、ソースコードで理解する方が簡単ですよね。<br /> ということで、上記ユースケース図の例を、疑似コードに置換えてみます。</p> <p>冷蔵庫利用者のユースケース疑似コード</p> <pre><code class="py"># TODO: 例として挙げたユースケース図からは、ユースケースの実行順序までは読取れない def ドアを開ける: # ドアを開ける際の処理記述 def ラッピングを外す: # ラッピングを外す際の処理記述 def 食品を入れる: if 食品にラッピングが付いている: ラッピングを外す() ドアを開ける() # 食品を入れる際の処理記述 def 食品を取る: ドアを開ける() # 食品を取る際の処理記述 </code></pre> <p>各ユースケースは、各メソッドと対応します。</p> <p><code>include</code> の関係先ユースケース(例における「ドアを開ける」ユースケース)は、関係元ユースケース(例における「食品を入れる」ユースケースおよび「食品を取る」ユースケース)の共通部品として、関数内で呼出すメソッドとして対応します。</p> <p><code>extend</code> の関係元ユースケース(例における「ラッピングを外す」ユースケース)は、関係先ユースケース(例における「食品を入れる」ユースケース)を一部拡張するため、拡張点「食品にラッピングが付いている」場合にのみ呼出すメソッドとして対応します。</p> <p>ここで注意ですが、例として挙げたユースケース図からは、ユースケースの実行順序までは読取れないことに気をつけてください。<br /> 例えば、「食品を入れる」ユースケースで実行する、「ドアを開ける」ユースケース/「ラッピングを外す」ユースケース/「食品を入れる」ユースケースの3つ(3番目は、ユースケース自身のユースケースを指す)は、本来は前後関係がありますが、ユースケース図からは読取れません。<br /> 「ドアを開ける」前に「食品を入れる」ことはできませんし、「ラッピングを外す」前に「食品を入れる」ことは、本来はできないので、疑似コードでは順序を指定してます(ドアを開けた後にラッピングを外すことはできますが、電気代が掛かるので、先にラッピングを外しています)。</p> <p>表でまとめると、下記の通りです。</p> <div class="table-responsive"><table> <thead> <tr> <th>ユースケース図</th> <th>疑似ソースコード</th> </tr> </thead> <tbody> <tr> <td>ユースケース</td> <td>メソッド</td> </tr> <tr> <td><code>include</code></td> <td>関係元ユースケースの内部で実行するユースケース</td> </tr> <tr> <td><code>extend</code></td> <td>関係先ユースケースの内部で、拡張点が真の場合に実行するユースケース</td> </tr> <tr> <td>拡張点</td> <td><code>extend</code> の関係元ユースケースを実行する場合は真を表す真偽値</td> </tr> </tbody> </table></div> <p>こう見ると、最初の疑問点がはっきりすると思います。</p> <h2>どのように <code>include</code> と <code>extend</code> を使い分けるのか</h2> <p><code>include</code> の関係先ユースケースは、複数のユースケースから呼出されることを想定し、共通部品化すると良いです。</p> <p><code>extend</code> の関係元ユースケースは、まず関係先ユースケースを共通部品化し、ある分岐点(拡張点)でのみ実行するユースケースとして外出しすると良いです。</p> <h2>なぜ <code>extend</code> の矢印の向きは <code>include</code> と逆なのか</h2> <p>ここは、私の個人的な見解を述べます。</p> <p><code>extend</code> が <code>include</code> と逆向きなのは、 <code>extend</code> の関係元ユースケースが拡張点を求めていることが理由と考えます。<br /> すなわち、 <code>extend</code> の関係元ユースケースは、関係先ユースケースにおける拡張点に「依存」していると言えるのではないか、と考えます。</p> <p>疑似コードを見ればわかりますが、 <code>extend</code> の関係先ユースケースに拡張点が存在しないユースケース図は、どのような場合に関係元ユースケースが実行されるのか、判断できかねます。<br /> つまり、 <code>extend</code> の関係元ユースケースと、関係先ユースケースの拡張点は、セットであると考えるのが自然です。<br /> さらに言えば、 <code>extend</code> の関係元ユースケースは、関係先ユースケースの拡張点なしには関係を結ぶことは難しく、拡張点に依存して存在を維持している関係である、と言うこともできます。</p> <h1 id="結論"><a href="#%E7%B5%90%E8%AB%96">結論</a></h1> <p>ユースケース図の関係は、疑似コードから逆変換して考えてみると、理解しやすい気がします。<br /> UMLは高度に抽象的であるため、具象的な疑似コードに置換えることで、把握しやすいのかもしれません。</p> <p>これを元に、ユースケース図がもっと流行ることを期待します。</p> Morichan tag:crieit.net,2005:PublicArticle/16107 2020-10-04T23:26:27+09:00 2020-10-04T23:26:27+09:00 https://crieit.net/posts/GitHub-5f79db931e76f GitHubのデフォルトラベルを和訳 + 絵文字付加 <p>本記事は、 Qrunch からの移転記事です。</p> <p>移転元: <a target="_blank" rel="nofollow noopener" href="https://morichan.qrunch.io/entries/s2n3b4OM2eC9wa5u">GitHubのデフォルトラベルを和訳 + 絵文字付加 - 雑木林</a></p> <h1 id="TL; DR"><a href="#TL%3B+DR">TL; DR</a></h1> <div class="table-responsive"><table> <thead> <tr> <th align="center">絵文字</th> <th align="center">原文</th> <th>和訳</th> </tr> </thead> <tbody> <tr> <td align="center">🐛</td> <td align="center">bug</td> <td>不具合</td> </tr> <tr> <td align="center">📝</td> <td align="center">document</td> <td>ドキュメント</td> </tr> <tr> <td align="center">🔙</td> <td align="center">duplicate</td> <td>別チケット有</td> </tr> <tr> <td align="center">✨</td> <td align="center">enhancement</td> <td>新機能など</td> </tr> <tr> <td align="center">🤝</td> <td align="center">good first issue</td> <td>初心者歓迎</td> </tr> <tr> <td align="center">🆘</td> <td align="center">help wanted</td> <td>助けて!</td> </tr> <tr> <td align="center">⛔</td> <td align="center">invalid</td> <td>不適当な内容</td> </tr> <tr> <td align="center">❔</td> <td align="center">question</td> <td>質問</td> </tr> <tr> <td align="center">❌</td> <td align="center">wontfix</td> <td>意図的な中止</td> </tr> </tbody> </table></div> <h1 id="はじめに"><a href="#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB">はじめに</a></h1> <p>GitHubのリポジトリを最初に作成すると、Issue/プルリクのラベルとして、下記が出現します。</p> <p><a href="https://crieit.now.sh/upload_images/f6da0dc1de3b0bb53b79a23b031fe5d45f79d42ececc6.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/f6da0dc1de3b0bb53b79a23b031fe5d45f79d42ececc6.png?mw=700" alt="Issue/プルリクのデフォルトラベル" /></a></p> <p>これらの意味を知りたくなったので、調べてみます。<br /> ついでに、該当しそうな絵文字を探して付けてみます。</p> <h1 id="各ラベルの説明と和訳と絵文字"><a href="#%E5%90%84%E3%83%A9%E3%83%99%E3%83%AB%E3%81%AE%E8%AA%AC%E6%98%8E%E3%81%A8%E5%92%8C%E8%A8%B3%E3%81%A8%E7%B5%B5%E6%96%87%E5%AD%97">各ラベルの説明と和訳と絵文字</a></h1> <p>以降、各ラベルについての説明と和訳、そして絵文字を付けてみます。</p> <p>下記に参考ページを載せます。</p> <p><a target="_blank" rel="nofollow noopener" href="https://help.github.com/en/github/managing-your-work-on-github/about-labels#using-default-labels">About labels - GitHub Help</a></p> <h2 id="bug"><a href="#bug">bug</a></h2> <p>特に言う必要は無いと思いますが、バグですね。<br /> ただ、日本ではバグという言葉は強すぎるという意見もあるので、「不具合」の方がいいかもしれません。<br /> 絵文字は 🐛 でいいんじゃないですかね。</p> <h2 id="documentation"><a href="#documentation">documentation</a></h2> <p>これは、比較的最近作られたラベルですかね?<br /> 上記画像のリポジトリは2年前くらいに作ったので、存在しないです。</p> <p>純粋に、「ドキュメント」で良いと思います。<br /> 絵文字は 📝 にしましょう。</p> <h2 id="duplicate"><a href="#duplicate">duplicate</a></h2> <p>これは、既存のIssueが既に立っていることを示します。<br /> 「別チケット有」なんてどうでしょうか?<br /> 絵文字は、ドンピシャなものが無かったのですが、 🔙 とします。</p> <h2 id="enhancement"><a href="#enhancement">enhancement</a></h2> <p>新機能や要望のIssueでよく見かける気がします。<br /> 「新機能など」とすることで、機能追加以外についてもこのラベルで対応できるのではないでしょうか。<br /> 絵文字は、みんな大好き ✨ です。</p> <h2 id="good first issue"><a href="#good+first+issue">good first issue</a></h2> <p>直訳では「最初のIssueに良い」ですかね。<br /> 実は「最初のコントリビューター向けのIssue」、という意味があるそうです。<br /> 意訳ですが、「初心者歓迎」なんてどうでしょうか?<br /> 絵文字は 🤝 なんていいですね。</p> <p><a target="_blank" rel="nofollow noopener" href="https://qiita.com/gotchane/items/69c332b2e67b9e20c378">OSS 貢献における GitHub の Issue 探しについて手始めに調べてみた - Qiita</a></p> <h2 id="help wanted"><a href="#help+wanted">help wanted</a></h2> <p>GitHubのヘルプページには「メンテナが課題やプルリクについて助けを求めていること」とあります。<br /> ということで、意訳ですが「助けて!」としてみます。<br /> 最後のびっくりマークにより、声を大にして求めている感じを出しています。<br /> 絵文字は 🆘 がぴったりです。</p> <h2 id="invalid"><a href="#invalid">invalid</a></h2> <p>文法エラーなどでもよく登場しますが、直訳では「無効な」という意味です。<br /> Issueにラベル付けすることを考えると、「不適当な内容」としてみると良いかもしれません。<br /> 不適切とまでは言わないが、Issueに価値が無くなってしまったことを伝えたいです。<br /> 絵文字は悩みましたが、このラベルが付いたらクローズされそうなので、 ⛔ としてみました。</p> <h2 id="question"><a href="#question">question</a></h2> <p>質問する際に使えますね。<br /> 和訳も「質問」で良いと思います。<br /> 絵文字は ❔ としてみます。<br /> ❓ もありますが、デフォルトラベルの背景色が赤紫っぽかったので、白色の方にしました。</p> <h2 id="wontfix"><a href="#wontfix">wontfix</a></h2> <p>不具合はあるが未修正のままにするなどのように、あえて変更しないことを意味します。<br /> 「意図的な中止」とすることで、意図が伝わる気がします。<br /> 絵文字は ❌ がいいですかね。</p> <h1 id="おわりに"><a href="#%E3%81%8A%E3%82%8F%E3%82%8A%E3%81%AB">おわりに</a></h1> <p>英語だととっつきづらいものも、日本語にすることで理解が進みますね。<br /> 絵文字文化ももっと広まることを願います。</p> Morichan tag:crieit.net,2005:PublicArticle/16106 2020-10-04T23:25:37+09:00 2020-10-04T23:25:37+09:00 https://crieit.net/posts/Git Gitのコミットメッセージに絵文字付きプレフィックスを適用する <p>本記事は、 Qrunch からの移転記事です。</p> <p>移転元: <a target="_blank" rel="nofollow noopener" href="https://morichan.qrunch.io/entries/boTlOB6zi3hGwNTd">Gitのコミットメッセージに絵文字付きプレフィックスを適用する - 雑木林</a></p> <h1 id="TL; DR"><a href="#TL%3B+DR">TL; DR</a></h1> <p>コミットメッセージのプレフィックスは、Angularスタイルを基準としています。<br /> また、各プレフィックスに絵文字を付ける際は、下記のようにしています。</p> <div class="table-responsive"><table> <thead> <tr> <th>プレフィックス</th> <th align="center">絵文字</th> <th>絵文字の綴り</th> </tr> </thead> <tbody> <tr> <td>feat</td> <td align="center">✨</td> <td>sparkles</td> </tr> <tr> <td>fix</td> <td align="center">🐛</td> <td>bug</td> </tr> <tr> <td>docs</td> <td align="center">📝</td> <td>memo</td> </tr> <tr> <td>style</td> <td align="center">📁</td> <td>file_folder</td> </tr> <tr> <td>refactor</td> <td align="center">♻️</td> <td>recycle</td> </tr> <tr> <td>perf</td> <td align="center">⚡️</td> <td>zap</td> </tr> <tr> <td>test</td> <td align="center">✅</td> <td>white_check_mark</td> </tr> <tr> <td>chore</td> <td align="center">🍰</td> <td>cake</td> </tr> <tr> <td>init</td> <td align="center">🎉</td> <td>tada</td> </tr> <tr> <td>merge</td> <td align="center">🔀</td> <td>twisted_rightwards_arrows</td> </tr> <tr> <td>review</td> <td align="center">👌</td> <td>ok_hand</td> </tr> <tr> <td>wip</td> <td align="center">🚧</td> <td>construction</td> </tr> </tbody> </table></div> <h1 id="はじめに"><a href="#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB">はじめに</a></h1> <p>コミットメッセージにプレフィックスを付ける文化が、少しずつ広がっています。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://qiita.com/numanomanu/items/45dd285b286a1f7280ed">【今日からできる】コミットメッセージに 「プレフィックス」 をつけるだけで、開発効率が上がった話 - Qiita</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://github.com/angular/angular.js/blob/master/DEVELOPERS.md#type">angular.js/DEVELOPERS.md at master · angular/angular.js</a></li> </ul> <p>一方、コミットメッセージに絵文字を付ける文化も、広まりつつあります。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://qiita.com/SnO2WMaN/items/45a68905e6768f5d7c39">customizable-gitmoji-cliで、gitのコミットメッセージに絵文字を付ける - Qiita</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://gitmoji.carloscuesta.me/">gitmoji | An emoji guide for your commit messages</a></li> </ul> <p>両者を組合せれば、最強のプレフィックスが出来上がるのではないかと考えました。<br /> ということで、絵文字付きプレフィックスという考え方を提案し、ここに記すこととします。</p> <h1 id="コミットメッセージにおける絵文字の付け方"><a href="#%E3%82%B3%E3%83%9F%E3%83%83%E3%83%88%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E7%B5%B5%E6%96%87%E5%AD%97%E3%81%AE%E4%BB%98%E3%81%91%E6%96%B9">コミットメッセージにおける絵文字の付け方</a></h1> <p>コミットメッセージに、絵文字名を <code>:</code> で挟むことにより、GitHub上で表示できます。<br /> また、コンソール上では、 emoji-cli などを利用することで、表示が可能です。</p> <p><a target="_blank" rel="nofollow noopener" href="https://qiita.com/b4b4r07/items/1811f39a5f1418b38ec4">コマンドラインで emoji を扱う - Qiita</a></p> <p>例えば、 ✨ (sparkles) という記号をコミットメッセージに書きたい場合、コミットメッセージを次のように記述します。</p> <pre><code class="txt">:sparkles: feat(ruby): やさしい日本語ページのルビタグ対応 </code></pre> <p>すると、GitHub上のコミットメッセージとして登録されます。</p> <p><a href="https://crieit.now.sh/upload_images/69c95e597c4645fbdc4475feb494043e5f79d2604c967.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/69c95e597c4645fbdc4475feb494043e5f79d2604c967.png?mw=700" alt="sparklesをGitHub上のコミットメッセージとして表示した画面" /></a></p> <p><a target="_blank" rel="nofollow noopener" href="https://github.com/covid19-miyazaki/covid19">covid19-miyazaki/covid19: 宮崎県(非公式) 新型コロナウイルス感染症対策サイト / Miyazaki COVID-19 Task Force website</a></p> <p>コミットメッセージの1行目は、表示できる文字数に制限があるため、長すぎる絵文字名の絵文字は気をつけたほうがいいかもしれません。</p> <p><a target="_blank" rel="nofollow noopener" href="https://qiita.com/tommy_aka_jps/items/a20d9a821cc01ee7bd96">git commit 時に書くコミットメッセージ1行目の表示文字数上限を調べてみた - Qiita</a></p> <h1 id="各プレフィックスと絵文字の紐付け"><a href="#%E5%90%84%E3%83%97%E3%83%AC%E3%83%95%E3%82%A3%E3%83%83%E3%82%AF%E3%82%B9%E3%81%A8%E7%B5%B5%E6%96%87%E5%AD%97%E3%81%AE%E7%B4%90%E4%BB%98%E3%81%91">各プレフィックスと絵文字の紐付け</a></h1> <p>大前提として、プレフィックスを使う場合は、リポジトリ内で統一する必要があります。<br /> これは、プレフィックスを使ったとしても、意味がわからなければ伝わらないからです。<br /> 同様に、多くの種類の絵文字を使うことも否定的です。<br /> これからの時代は、プロジェクト毎に、コーディングスタイルと共にコミットメッセージスタイルも定義する必要があると思います。</p> <p>今回は、Angularスタイルのプレフィックスを参考にします。<br /> <del>理由は、それ以外のスタイルを知らないからです。</del></p> <p><a target="_blank" rel="nofollow noopener" href="https://github.com/angular/angular.js/blob/master/DEVELOPERS.md#type">angular.js/DEVELOPERS.md at master · angular/angular.js</a></p> <p>また、絵文字については、Gitmojiを参考にします。<br /> <del>理由は、サイトが綺麗だからです。</del></p> <p><a target="_blank" rel="nofollow noopener" href="https://gitmoji.carloscuesta.me/">gitmoji | An emoji guide for your commit messages</a></p> <p>オリジナル絵文字を利用する場合は、GitHubで使える絵文字チートシートを参考にします。</p> <p><a target="_blank" rel="nofollow noopener" href="https://www.webfx.com/tools/emoji-cheat-sheet/">🎁 Emoji cheat sheet for GitHub, Basecamp, Slack & more</a></p> <p>以降、各プレフィックスの内容を説明し、それに見合った絵文字を紹介します。</p> <h2 id="feat"><a href="#feat">feat</a></h2> <blockquote> <p><strong>feat</strong>: A new feature</p> </blockquote> <p>新機能を追加する際に利用します。</p> <p>Gitmojiでは、同等の絵文字として ✨ (sparkles) を定義しています。<br /> 新機能を導入する際に使う絵文字です。</p> <blockquote> <p>:sparkles: Introducing new features.</p> </blockquote> <p>ということで、 feat には ✨ (sparkles) を利用します。</p> <hr /> <p>余談ですが、新機能というと、無かった機能を追加した際のみにも聞こえます。<br /> 僕の場合は、既存機能を変更する際や、既存機能を削除する際にも使っています。<br /> 変更/削除についても、変更することによって統一性が図れるとか、削除することによってUIが向上するとか、変更/削除そのものが機能追加という場合が多いなーと思っていたからです(いわゆる enhansement と同じ意味として捉えています。<br /> これについては、プロジェクト毎に決めておくといいかもしれません。</p> <h2 id="fix"><a href="#fix">fix</a></h2> <blockquote> <p><strong>fix</strong>: A bug fix</p> </blockquote> <p>不具合を修正する際に利用します。</p> <p>Gitmojiでは、同等の絵文字として 🐛 (bug) を定義しています。<br /> 意味は全く同じです。</p> <blockquote> <p>:bug: Fixing a bug.</p> </blockquote> <p>ということで、 fix には 🐛 (bug) を利用します。</p> <hr /> <p>また余談ですが、個人的には、修正コミットに 🐛 を付けることは、若干抵抗があります。<br /> GitHubでIssueファーストの開発をしていると、Issueでは不具合発見として 🐛 を付けて、修正プルリクとして 🐛 の絵文字を付けてしまいませんか?<br /> 🐛 という絵文字自体には2つの意味があるからです。</p> <ul> <li>不具合発見時</li> <li>不具合修正時</li> </ul> <p>前者は 🐛 で問題ないのですが、後者については考える余地があるはずです。<br /> もし虫網や虫籠の絵文字があれば、それを使っていたのですが......</p> <p>コミット時に不具合を意図的に入れることは考えられない点と、不具合発見時をコミットメッセージで表すことが無い点、さらに 不具合 == バグ == 🐛 を知らないエンジニアがほぼいない点を考慮して、 fix には 🐛 がいいかなと考えました。</p> <h2 id="docs"><a href="#docs">docs</a></h2> <blockquote> <p><strong>docs</strong>: Documentation only changes</p> </blockquote> <p>ドキュメント類を修正する際に利用します。<br /> 修正と言っていますが、追加や削除時にも使ってよいと思います。</p> <p>Gitmojiでは、同等の絵文字として 📝 (pencil) を定義しています。<br /> ドキュメント類を記述する際に利用します。</p> <blockquote> <p>:pencil: Writing docs.</p> </blockquote> <p>また、 pencil と memo は、GitHubでは同じ絵文字として認識されます。</p> <p><a href="https://crieit.now.sh/upload_images/aaa7383ded55b293dbf016257c05ce015f79d2d1c40c6.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/aaa7383ded55b293dbf016257c05ce015f79d2d1c40c6.png?mw=700" alt="pencil と memo の絵文字" /></a></p> <p>ちなみに、鉛筆だけの絵文字は pencil2 です。<br /> <del>これは酷い......</del></p> <p><a href="https://crieit.now.sh/upload_images/ef7ebafe4134a31651e449623053f44f5f79d30a659e8.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/ef7ebafe4134a31651e449623053f44f5f79d30a659e8.png?mw=700" alt="pencil2 の絵文字" /></a></p> <p>ということで、 pencil では文字ベースとして判断しづらい点から、 📝 (memo) を利用します。</p> <h2 id="style"><a href="#style">style</a></h2> <blockquote> <p><strong>style</strong>: Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)</p> </blockquote> <p>ソースコードの可読性を変更する際に利用します。<br /> Lintを適用した際や、空行を追加した際など、振舞いに変化を与えない変更が該当します。</p> <p>Gitmojiでは、 🎨 (art) が当てはまるかもしれません。<br /> 🎨 は、ファイル構造を変更する際、または、ソースコードのフォーマットを変更する際に利用します。</p> <blockquote> <p>:art: Improving structure / format of the code.</p> </blockquote> <p>style という観点で言えば、2番目の意味に該当することは間違いありません。<br /> また、1番目の意味も、ファイル構造の style という側面で見れば、該当すると見ることもできます。</p> <p>しかし、 <code>art</code> という単語からは、UIに関連しそうなイメージが付きます。<br /> 実際、下記のようなIssueも上がっています。</p> <p><a target="_blank" rel="nofollow noopener" href="https://github.com/carloscuesta/gitmoji/issues/320">🎨 for design and 📐 for structure · Issue #320 · carloscuesta/gitmoji</a></p> <p>style という内容に合わせるため、ここでは 📁 (file_folder) を利用します。</p> <p><a target="_blank" rel="nofollow noopener" href="https://emojipedia.org/file-folder/">📁 File Folder Emoji</a></p> <h2 id="refactor"><a href="#refactor">refactor</a></h2> <blockquote> <p><strong>refactor</strong>: A code change that neither fixes a bug nor adds a feature</p> </blockquote> <p>ソースコードの可読性を向上する際に利用します。</p> <p>Gitmojiには、同等の絵文字として ♻️ (recycle) を定義しています。<br /> 意味はほとんど同じです。</p> <blockquote> <p>:recycle: Refactoring code.</p> </blockquote> <p>ということで、 refactor には ♻️ (recycle) を利用します。</p> <h2 id="perf"><a href="#perf">perf</a></h2> <blockquote> <p><strong>perf</strong>: A code change that improves performance</p> </blockquote> <p>パフォーマンスを向上する際に利用します。</p> <p>Gitmojiには、同等の絵文字として ⚡️ (zap) を定義しています。<br /> 意味は全く同じです。</p> <blockquote> <p>:zap: Improving performance.</p> </blockquote> <p>ということで、 perf には ⚡️ (zap) を利用します。</p> <h2 id="test"><a href="#test">test</a></h2> <blockquote> <p><strong>test</strong>: Adding missing or correcting existing tests</p> </blockquote> <p>テストコードを追加する際や、既存テストコードを修正する際に利用します。</p> <p>Gitmojiには、同等の絵文字として ✅ (white_check_mark) を定義しています。<br /> 意味は全く同じです。</p> <blockquote> <p>:white_check_mark: Updating tests.</p> </blockquote> <p>また、チェックマークの絵文字は、他にも ✔️ (heavy_check_mark) が存在します。</p> <p>正直、どちらでもいいとは思います。<br /> 個人的には、Windowsでの開発が多かったため、 ✔️ を利用していました。<br /> ✔️ のチェックの色が緑色で、わかりやすかったためです。</p> <p>しかし、他OSではチェックの色が黒色で、わかりづらくなっています。<br /> 一方、 ✅ は、殆どのメーカーが緑色矩形の白抜きチェックであり、わかりやすくなっています。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://emojipedia.org/check-mark-button/">✅ White Heavy Check Mark Emoji</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://emojipedia.org/check-mark/">✔️ Heavy Check Mark Emoji</a></li> </ul> <p>ということで、 test には ✅ (white_check_mark) を利用します。</p> <h2 id="chore"><a href="#chore">chore</a></h2> <blockquote> <p><strong>chore</strong>: Changes to the build process or auxiliary tools and libraries such as documentation generation</p> </blockquote> <p>自動生成ツールによりファイルを変更する際に利用します。<br /> chore とは、雑務という意味があります。</p> <p><a target="_blank" rel="nofollow noopener" href="https://ejje.weblio.jp/content/chore">choreの意味・使い方・読み方 | Weblio英和辞書</a></p> <p>Gitmojiには、該当する絵文字はありません。<br /> 一部分で該当しそうな絵文字は、いくつか定義しています。</p> <p>少し頭を悩ませましたが、英語圏のスラングである 'It's a piece of cake' から取って、 🍰 (cake) を利用します。</p> <p><a target="_blank" rel="nofollow noopener" href="https://ejje.weblio.jp/content/it%27s+a+piece+of+cake">it's a piece of cakeの意味・使い方・読み方 | Weblio英和辞書</a></p> <h2 id="Angularスタイル以外"><a href="#Angular%E3%82%B9%E3%82%BF%E3%82%A4%E3%83%AB%E4%BB%A5%E5%A4%96">Angularスタイル以外</a></h2> <p>以下は、Angularスタイル以外のコミットメッセージで利用する絵文字です。<br /> プレフィックスは付けても付けなくても構いません。</p> <h3 id="First commit"><a href="#First+commit">First commit</a></h3> <p>最初のコミットとしてよく使われる first commit ですが、Gitmojiでは 🎉 (tada) として定義しています。</p> <blockquote> <p>:tada: Initial commit.</p> </blockquote> <p>ということで、 first commit には 🎉 (tada) を利用します。<br /> プレフィックスは init とします。</p> <hr /> <p>余談ですが、個人的には first commit を空メッセージにするのは懐疑的です。<br /> 必要無いから消したのか、書き忘れたのか、空メッセージでは判断できないためです。</p> <p><a target="_blank" rel="nofollow noopener" href="https://qiita.com/NorsteinBekkler/items/b2418cd5e14a52189d19">Gitの最初のコミットは空コミットにしよう - Qiita</a></p> <h3 id="Merge commit"><a href="#Merge+commit">Merge commit</a></h3> <p>マージ実行時のコミットですが、Gitmojiでは 🔀 (twisted_rightwards_arrows) として定義しています。</p> <blockquote> <p>:twisted_rightwards_arrows: Merging branches.</p> </blockquote> <p>ということで、マージコミットには 🔀 (twisted_rightwards_arrows) を利用します。<br /> 長いですが、マージコミットの1行目はあまり重要であることは少ないため、問題なしとします。<br /> プレフィックスは merge とします。</p> <h3 id="Review commit"><a href="#Review+commit">Review commit</a></h3> <p>レビュー指摘反映時のコミットですが、Gitmojiでは 👌 (ok_hand) として定義しています。</p> <blockquote> <p>:ok_hand: Updating code due to code review changes.</p> </blockquote> <p>ということで、レビュー指摘反映コミットには 👌 (ok_hand) を利用します。<br /> <del>あまり個人的には多用しないようにすべきとは思いますが......</del></p> <h3 id="WIP commit"><a href="#WIP+commit">WIP commit</a></h3> <p>作業中コミット (WIP: Work in Progress) ですが、Gitmojiでは 🚧 (construction) として定義しています。</p> <blockquote> <p>:construction: Work in progress.</p> </blockquote> <p>ということで、作業中コミットには 🚧 (construction) を利用します。<br /> プレフィックスは wip とします。</p> <h1 id="おわりに"><a href="#%E3%81%8A%E3%82%8F%E3%82%8A%E3%81%AB">おわりに</a></h1> <p>現在ではプライベートリポジトリでしか利用してませんが、個人的には可読性が上がっている気がします。<br /> これを開発チームに展開して共有できれば、また違った世界が見えるかもしれません。</p> <p>絵文字は、用法用量を守り、適切にご利用ください。</p> <h1 id="ちなみに"><a href="#%E3%81%A1%E3%81%AA%E3%81%BF%E3%81%AB">ちなみに</a></h1> <p>Gitmojiでは、本記事と似たようなIssueが立っていました。<br /> もしかしたら、Gitmoji側で方針が決まるかもしれません。</p> <p><a target="_blank" rel="nofollow noopener" href="https://github.com/carloscuesta/gitmoji/issues/429">Add a "semver" field for each emoji · Issue #429 · carloscuesta/gitmoji</a></p> <p>こんなリポジトリもあります。<br /> これを使えば、本記事の内容をPJで統一しやすくなりますね。</p> <p><a target="_blank" rel="nofollow noopener" href="https://github.com/negokaz/git-fancy-message-prefix">negokaz/git-fancy-message-prefix: A Git prepare-commit-msg hook for fancy commit message</a></p> Morichan tag:crieit.net,2005:PublicArticle/16105 2020-10-04T23:24:24+09:00 2020-10-04T23:24:24+09:00 https://crieit.net/posts/Qrunch-5f79db1809205 Qrunchにおける自身のブログページからタグを消す方法 <p>本記事は、 Qrunch からの移転記事です。</p> <p>移転元: <a target="_blank" rel="nofollow noopener" href="https://morichan.qrunch.io/entries/fOQbxxTAWojQC9su">Qrunchにおける自身のブログページからタグを消す方法 - 雑木林</a></p> <h1 id="TL; DR"><a href="#TL%3B+DR">TL; DR</a></h1> <p>次の2つを実施すれば良いです。</p> <ul> <li>「よく使うタグ」モジュールの除去</li> <li>記事下のタグ表示エリアの除去</li> </ul> <h1 id="はじめに"><a href="#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB">はじめに</a></h1> <p>以前、Qrunchにおけるタグとカテゴリの使い分けについての記事を書きました。<br /> その際、「タグはQrunchサービス全体の分類子として、カテゴリは自身のブログ内の分類子として、それぞれ使い分けができそう」と書きました。</p> <p><a target="_blank" rel="nofollow noopener" href="https://morichan.qrunch.io/entries/WpV5JuoLesYtTgz0">Qrunchのタグとカテゴリの使い分けベストプラクティス</a></p> <p>しかし、Qrunchのブログページにおけるデフォルトデザインには、何ヶ所かタグを表示しています。<br /> そのため、タグをブログページでは使わないようにするための手法が、完全に使えるとは言えません。</p> <p>本記事では、Qrunchのブログページからタグを消す方法を記します。</p> <h1 id="タグを消す方法"><a href="#%E3%82%BF%E3%82%B0%E3%82%92%E6%B6%88%E3%81%99%E6%96%B9%E6%B3%95">タグを消す方法</a></h1> <p>まず、デザイン修正方法を記します。</p> <p>Qrunchでは、ブログページのデザインをカスタマイズできます。<br /> ダッシュボードのサイドバーにおける、デザイン欄を選択してください。</p> <p><a href="https://crieit.now.sh/upload_images/f196423325e61accf61572d3c9234f4d5f79d1ac4fdae.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/f196423325e61accf61572d3c9234f4d5f79d1ac4fdae.png?mw=700" alt="ダッシュボードのサイドバーにおけるデザイン欄" /></a></p> <p>すると、「デザインの設定」ページに飛びます。<br /> この画面から、デザインを修正していきます。</p> <p>Qrunchのブログページに存在するタグ表示エリアは、サイドモジュールとフッターの2箇所です。<br /> それぞれについて、消す方法を記します。</p> <h2 id="サイドモジュールからタグを消す"><a href="#%E3%82%B5%E3%82%A4%E3%83%89%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E3%81%8B%E3%82%89%E3%82%BF%E3%82%B0%E3%82%92%E6%B6%88%E3%81%99">サイドモジュールからタグを消す</a></h2> <p>サイドモジュールからタグを消す方法は、ワンクリックで可能です。</p> <p>サイドバーにおける「サイドモジュール」欄の「よく使うタグ」項目を削除すれば良いです。</p> <p><a href="https://crieit.now.sh/upload_images/2829efb2f39cc99b82fa374b341ec70f5f79d1bf61e75.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/2829efb2f39cc99b82fa374b341ec70f5f79d1bf61e75.png?mw=700" alt="「サイドモジュール」欄の「よく使うタグ」項目削除" /></a></p> <h2 id="フッターからタグを消す"><a href="#%E3%83%95%E3%83%83%E3%82%BF%E3%83%BC%E3%81%8B%E3%82%89%E3%82%BF%E3%82%B0%E3%82%92%E6%B6%88%E3%81%99">フッターからタグを消す</a></h2> <p>フッターのデザインは、カスタムCSSで消します。</p> <p>サイドバーにおける「カスタムCSS」欄のテキストエリアに、 <code>.content-module.tag-content-module.entry-content-module</code> クラスを非表示にするCSSを入力します。</p> <pre><code class="css">.content-module.tag-content-module.entry-content-module { display: none; } </code></pre> <p><a href="https://crieit.now.sh/upload_images/24ff27b7e3019dd573703f3670ffa1325f79d1e1653b6.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/24ff27b7e3019dd573703f3670ffa1325f79d1e1653b6.png?mw=700" alt="フッターのタグ表示エリア除去" /></a></p> <h1 id="おわりに"><a href="#%E3%81%8A%E3%82%8F%E3%82%8A%E3%81%AB">おわりに</a></h1> <p>これで、Qrunchのブログはカテゴリでしか分類できなくなりました!<br /> タグをカテゴリをうまく使い分け、よいQrunchライフを送ってください。</p> Morichan tag:crieit.net,2005:PublicArticle/16104 2020-10-04T23:22:43+09:00 2020-10-04T23:23:49+09:00 https://crieit.net/posts/Sublime-Text-LocalBridge-exe Sublime Text起動中に「LocalBridge.exe - 正しくないイメージ」というエラーが発生する場合の対処法 <p>本記事は、 Qrunch からの移転記事です。</p> <p>移転元: <a target="_blank" rel="nofollow noopener" href="https://morichan.qrunch.io/entries/fawBugG89P7CkIG4">Sublime Text起動中に「LocalBridge.exe - 正しくないイメージ」というエラーが発生する場合の対処法 - 雑木林</a></p> <h1 id="TL; DR"><a href="#TL%3B+DR">TL; DR</a></h1> <p>Officeというアプリを消しましょう。<br /> うまくいく場合があります。</p> <p>Skypeが入っている場合も、消せる場合は消しましょう。</p> <h1 id="はじめに"><a href="#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB">はじめに</a></h1> <p>Sublime Textを起動中、突如謎のエラーダイアログが出てくる場合があります。</p> <pre><code class="txt">LocalBridge.exe - 正しくないエラー X:¥Users¥USER_NAME¥AppData¥Roaming¥Sublime Text 3¥Packages¥IMESupport¥imesupport_hook_x64.dll は Windows 上では実行できないか、エラーを含んでいます。 元のインストール メディアを使用して再インストールするか、システム管理者またはソフトウェアの製造元に問い合わせてください。 エラー状態 0xc000012f。 </code></pre> <p>このエラーダイアログ、Sublime Text起動直後は特に発生しませんが、数分起動し続けていると出てきます。<br /> しかも、Sublime Textが起動中は、エラーダイアログを消しても消しても邪魔してきます。<br /> Sublime Textを消した後、数回エラーダイアログを消し続けることで、ようやく消えます。</p> <p>これを完全に消す方法を探ります。</p> <h1 id="原因"><a href="#%E5%8E%9F%E5%9B%A0">原因</a></h1> <p>どうやら、 <a target="_blank" rel="nofollow noopener" href="https://github.com/chikatoike/IMESupport">IME Support</a> プラグインが原因のようです。</p> <p><a target="_blank" rel="nofollow noopener" href="https://github.com/chikatoike/IMESupport/issues/27">https://github.com/chikatoike/IMESupport/issues/27</a></p> <p>IME Supportプラグインでは、 <code>imesupport_hook_x64.dll</code> というライブラリを利用しています。<br /> このライブラリの実態を、実はOfficeアプリ(後述)でも利用してしまっており、OfficeアプリとSublime Textの両方で同じライブラリを掴もうとする際に、エラーダイアログが出現してしまいます。</p> <p><a target="_blank" rel="nofollow noopener" href="http://blog.livedoor.jp/sire2/archives/51165394.html">1-1/3+1/5-1/7+1/9-・・・:Sublime Text3の設定メモ - livedoor Blog(ブログ)</a></p> <h1 id="解決方法(暫定)"><a href="#%E8%A7%A3%E6%B1%BA%E6%96%B9%E6%B3%95%EF%BC%88%E6%9A%AB%E5%AE%9A%EF%BC%89">解決方法(暫定)</a></h1> <p>Officeアプリをアンインストールすることで、解決できます。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://qiita.com/HidKamiya/items/161c800d6b01048bc988">エラー「LocalBridge.exe - 正しくないイメージ」 - Qiita</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://www.pa-solution.net/daj/bs/faq/Detail.aspx?id=4421">よくあるご質問(FAQ検索)| デジタルアーツ</a></li> </ul> <p>Officeアプリというのは、いわゆるWordやExcelといったMicrosoft Officeの1アプリではなく、特に必要ない「新しい Office を始めよう」または「My Office」というような名前の、Office製品自体を管理するアプリのようです。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://pcclick.seesaa.net/article/452331620.html">"新しい Office を始めよう" というアイコンは何のためにあるの?: パソコンのツボ ~Office のTIP</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://answers.microsoft.com/ja-jp/windows/forum/all/msアプリの新/87273011-9c94-45f2-ac6b-2bbbb73e9c26">MSアプリの「新しいOfficeを始めよう」と「My - マイクロソフト コミュニティ</a></li> </ul> <p>このアプリをアンインストールしても、他のExcelやWordといったMicrosoft Officeのアプリは消えないので、問題ありません。</p> <h1 id="おわりに"><a href="#%E3%81%8A%E3%82%8F%E3%82%8A%E3%81%AB">おわりに</a></h1> <p>Sublime Textを使う人は、ほとんどがIMESupportを入れていると思うのですが、ほとんどエラー対処法が見つからなくて困りました。<br /> これで、少しでもエラーダイアログのイライラが解消できたら幸いです。</p> <h1 id="実は"><a href="#%E5%AE%9F%E3%81%AF">実は</a></h1> <p>また表示されました。<br /> 今度は SmartAudio3.exe になってます。</p> <p><a href="https://crieit.now.sh/upload_images/3fc54d9359ac7925963a31a9a84b563c5f79cc5834f3d.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3fc54d9359ac7925963a31a9a84b563c5f79cc5834f3d.png?mw=700" alt="「SmartAudio3.exe - 正しくないイメージ」エラーダイアログ" /></a></p> <p>Officeアプリ消したけど、他にも掴んでいるんでしょうか?<br /> 続報を待て!</p> Morichan tag:crieit.net,2005:PublicArticle/16103 2020-10-04T23:21:48+09:00 2020-10-04T23:21:48+09:00 https://crieit.net/posts/Qrunch-5f79da7c9c081 Qrunchのタグとカテゴリの使い分けベストプラクティス <p>本記事は、 Qrunch からの移転記事です。</p> <p>移転元: <a target="_blank" rel="nofollow noopener" href="https://morichan.qrunch.io/entries/WpV5JuoLesYtTgz0">Qrunchのタグとカテゴリの使い分けベストプラクティス - 雑木林</a></p> <h1 id="TL; DR"><a href="#TL%3B+DR">TL; DR</a></h1> <p>タグはたくさん書こう。<br /> カテゴリは少なく書こう。</p> <h1 id="はじめに"><a href="#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB">はじめに</a></h1> <p>Qrunchで記事を書くときに、真っ先に出てくるタグをカテゴリ。</p> <p><a href="https://crieit.now.sh/upload_images/8b133a3626960956e365ec5ec1c97ba75f79ca553774c.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/8b133a3626960956e365ec5ec1c97ba75f79ca553774c.png?mw=700" alt="タグとカテゴリの表示画像" /></a></p> <p>この2つの違いを正確に理解している人は、果たしてどれだけいるんでしょうか?<br /> 僕はわかりません!</p> <p>ということで、Qrunchのタグとカテゴリの挙動から、どのように使い分けたらいいのか、そのベストプラクティスを探ります。</p> <h1 id="挙動調査"><a href="#%E6%8C%99%E5%8B%95%E8%AA%BF%E6%9F%BB">挙動調査</a></h1> <p>下記のような記事を作成し、タグとカテゴリの挙動を調べます。</p> <p><a href="https://crieit.now.sh/upload_images/041c3036a348ad6d94eafeaaaea63d045f79ca7820bcc.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/041c3036a348ad6d94eafeaaaea63d045f79ca7820bcc.png?mw=700" alt="タグとカテゴリの挙動調査用記事" /></a></p> <h2 id="事前知識"><a href="#%E4%BA%8B%E5%89%8D%E7%9F%A5%E8%AD%98">事前知識</a></h2> <p>タグとカテゴリを知る前に、どうしても理解しておく必要があるものがあります。<br /> それは、「Qrunch.net」と「Qrunchブログ」です(この2つの名称は、本記事独自のものです)。</p> <p>「Qrunch.net」とは、いわゆるこの画面です。</p> <p><a href="https://crieit.now.sh/upload_images/ea913e1df34f668f2cf2eef2d60223d85f79cb63afae4.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/ea913e1df34f668f2cf2eef2d60223d85f79cb63afae4.png?mw=700" alt="Qrunch.netの画面" /></a></p> <p>Qrunchの記事として書かれた様々な項目が、一覧として表示されています。</p> <p>一方、「Qrunchブログ」というのは、上記画面の記事を書いている各ユーザーが主体のブログのことです。<br /> これは、各ユーザーごとにフォーマットが異なります。</p> <p><a href="https://crieit.now.sh/upload_images/c4e9b56c7b1c3246f97efc6f0bd70ec35f79cb73c3cda.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/c4e9b56c7b1c3246f97efc6f0bd70ec35f79cb73c3cda.png?mw=700" alt="Qrunchブログの画面(MorichanのQrunchブログ)" /></a></p> <p>Qrunchというサービスは、この「Qrunch.net」と「Qrunchブログ」の2つを併せ持つサービスのことです。<br /> ということを前提に、話を進めていきます。</p> <p>また、「Qrunchブログ」のフォーマットは、Editorialを利用しています。</p> <h2 id="タグ"><a href="#%E3%82%BF%E3%82%B0">タグ</a></h2> <p>記事にタグを付けると、「Qrunch.net」記事のタグとして表示されます。</p> <p><a href="https://crieit.now.sh/upload_images/29c3b236ee7a9a0a93e2792b3f64b83f5f79cb88312c2.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/29c3b236ee7a9a0a93e2792b3f64b83f5f79cb88312c2.png?mw=700" alt="「Qrunch.net」記事にタグとして表示されている画面" /></a></p> <p>また、「Qrunchブログ」の側面に、既存の記事全てのタグを「よく使うタグ」という項目として一覧表示しています。<br /> <del>ちなみに、僕のQrunchブログでは消えてます。</del></p> <p>さらに、「Qrunchブログ」における記事下部にも、同じタグが表示されています。</p> <p><a href="https://crieit.now.sh/upload_images/c59098d2443667ef4c84729c21ed03465f79cb9f2882c.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/c59098d2443667ef4c84729c21ed03465f79cb9f2882c.png?mw=700" alt="「Qrunchブログ」記事下部にタグとして表示されている画面" /></a></p> <p>「Qrunch.net」のタグをクリックすると、同じタグを付けている別ユーザーの記事が一覧表示できます。<br /> 「Qrunchブログ」のタグをクリックすると、同じタグを付けている自身の記事が一覧表示できます。</p> <p>つまりタグとは、「Qrunch.net」および「Qrunchブログ」両方に表示される分類子ということです。</p> <h2 id="カテゴリ"><a href="#%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA">カテゴリ</a></h2> <p>記事にカテゴリを付けると、「Qrunchブログ」における記事上部にカテゴリとして表示されます。</p> <p><a href="https://crieit.now.sh/upload_images/1cb7b90227329081c2136f7abe541e635f79cbb3982c8.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/1cb7b90227329081c2136f7abe541e635f79cbb3982c8.png?mw=700" alt="「Qrunchブログ」記事上部にカテゴリとして表示されている画面" /></a></p> <p>また、「Qrunchブログ」の側面に、既存の記事全てのカテゴリを「カテゴリ」という項目として一覧表示しています。</p> <p>しかし、「Qrunch.net」の記事の方には、何も表示されません。<br /> 「Qrunch.net」を色々見てみましたが、それらしい項目は見つかりませんでした。</p> <p>「Qrunchブログ」のカテゴリをクリックすると、同じカテゴリを付けている自身の記事が一覧表示できます。</p> <p>つまりカテゴリとは、「Qrunchブログ」にのみ表示される分類子ということです。</p> <h2 id="挙動調査まとめ"><a href="#%E6%8C%99%E5%8B%95%E8%AA%BF%E6%9F%BB%E3%81%BE%E3%81%A8%E3%82%81">挙動調査まとめ</a></h2> <p>タグは「Qrunch.net」と「Qrunchブログ」の両方に影響を与えるのに対して、カテゴリは「Qrunchブログ」にのみ影響を与えるみたいです。</p> <p>また、タグもカテゴリも分類子であり、タグは「Qrunch.net」における他ユーザーの記事も表示できるのに対し、カテゴリは「Qrunchブログ」の自身の記事のみ表示できるようです。</p> <h1 id="ベストプラクティス"><a href="#%E3%83%99%E3%82%B9%E3%83%88%E3%83%97%E3%83%A9%E3%82%AF%E3%83%86%E3%82%A3%E3%82%B9">ベストプラクティス</a></h1> <p>次のような使い方を提案します。</p> <h2 id="タグの使い方"><a href="#%E3%82%BF%E3%82%B0%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9">タグの使い方</a></h2> <p>記事におけるタグは、その記事に関連していそうなキーワードをできるだけ書いておきましょう。</p> <p>これにより、次のような効果が期待できます。</p> <ul> <li>「Qrunch.net」からのユーザー流入の向上 <ul> <li>他ユーザーの記事のタグと同じタグを指定できれば、関連記事としてユーザー流入を見込めます。</li> </ul></li> <li>「Qrunch.net」における他記事タグとの表記揺れの解消 <ul> <li>大文字小文字を区別する仕様があったり、英語表記カタカナ表記といった表記揺れを解消することで、同じタグの指定率の向上が見込めます。</li> </ul></li> </ul> <p>しかし、次のようなデメリットも存在します。</p> <ul> <li>「Qrunchブログ」の関連記事が見つかりづらい <ul> <li>自身の「Qrunchブログ」で関連記事を見つけたい場合、どのタグで検索すれば良いかわかりづらい</li> </ul></li> <li>タグの管理が大変になりやすい <ul> <li>全ての表記揺れに対応する場合、タグの表記揺れ対応項目を全て記録しなければ、タグから関連記事への遷移が困難になってしまいます。</li> </ul></li> </ul> <p>上記デメリットを解消するのが、カテゴリの利用です。</p> <h2 id="カテゴリの利用"><a href="#%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA%E3%81%AE%E5%88%A9%E7%94%A8">カテゴリの利用</a></h2> <p>記事におけるカテゴリは、自身の「Qurnchブログ」における分類子として、自身が管理できる量だけ記載しましょう。</p> <p>これにより、次のような効果が期待できます。</p> <ul> <li>タグ乱立による「Qrunchブログ」関連記事検索性低下の防止 <ul> <li>自身の「Qrunchブログ」内では、タグ検索ではなくカテゴリ検索を使うことで、「Qrunchブログ」内の関連記事の検索性を維持できます。</li> </ul></li> <li>タグ乱立によるタグ管理性低下の防止 <ul> <li>自身の「Qrunchブログ」内では、カテゴリ検索による関連記事への遷移を主軸とするため、タグ管理をする必要がなくなります。</li> <li>カテゴリ管理はする必要がありますが、カテゴリの量は少なく(管理できる量だけ記載)するため、管理の負担は少なくなります。</li> </ul></li> <li>独自の分類子による「Qrunchブログ」内の検索性向上 <ul> <li>自身の「Qrunchブログ」でしか通用しない独自の分類子を、カテゴリとして指定することにより、「Qrunch.net」のタグとは無関係そうな分類子を独自に定義できます。</li> <li>シリーズ物などに独自カテゴリを指定することで、「Qrunchブログ」の検索性の向上が見込めます。</li> </ul></li> </ul> <p>カテゴリが「Qrunch.net」に影響を与えないことを逆手にとった活用法が考案できます。</p> <h1 id="おわりに"><a href="#%E3%81%8A%E3%82%8F%E3%82%8A%E3%81%AB">おわりに</a></h1> <p>Qrunchにおけるタグとカテゴリは、影響範囲が異なります。<br /> つまり、タグはQrunchサービス全体の分類子として、カテゴリは自身のブログ内の分類子として、それぞれ使い分けができそうです。</p> <p>もちろん、タグの濫用は御法度ですよ。<br /> 他ユーザーの迷惑にならない程度に、全く無関係のタグは付けないようにしましょうね。</p> <p>用法用量を守って、良いQrunch生活を送りましょう!</p> Morichan tag:crieit.net,2005:PublicArticle/16102 2020-10-04T23:21:00+09:00 2020-10-04T23:21:00+09:00 https://crieit.net/posts/Qrunch-5f79da4c72354 Qrunchの記事を間違えて全削除してしまった!!!から頑張って復活させた <p>本記事は、 Qrunch からの移転記事です。</p> <p>移転元: <a target="_blank" rel="nofollow noopener" href="https://morichan.qrunch.io/entries/2scbzST9o2dizxYm">Qrunchの記事を間違えて全削除してしまった!!!から頑張って復活させた - 雑木林</a></p> <h1 id="それは起きてしまった悲劇"><a href="#%E3%81%9D%E3%82%8C%E3%81%AF%E8%B5%B7%E3%81%8D%E3%81%A6%E3%81%97%E3%81%BE%E3%81%A3%E3%81%9F%E6%82%B2%E5%8A%87">それは起きてしまった悲劇</a></h1> <p>2020年4月25日、早朝4:30頃の出来事でした。<br /> 「数か月ぶりにQrunchでも書こう」<br /> 16日間もの長期休みを手に入れ、仕事終わりに動画鑑賞で夜明けを迎える直前に、ふと思い立ったのです。</p> <p>記事の内容は、タグとカテゴリの整理についてです。<br /> そのため、記事を書く前に、まずは自身のQrunch記事のタグとカテゴリの整理をしておきたかったのです。</p> <p>一旦、既存の全記事に目を通し、タグとカテゴリを整理しました。<br /> 更新が必要な記事は更新ボタンを、そうでない記事は戻るボタンを、それぞれ押下して、整理していきました。</p> <p><img src="http://www.plantuml.com/plantuml/png/ZLHDQjj05DxFAOPi0eN6-onAhj1rd8Lh2MnmHgeqNeHIy6ZInBPicfOsRQbJOfEcnW5HI22D7Dh3l5YIRz4dpGXLhJ7T6FFc-tdVDuDsN5vpU7k_HNYJjqpwr6cpUWF45OW-Y3VW-SdquqFeHvzlejFl88ButNnvDbcAs_ZRd916qp2fkM_p0sgORjrfshnfCK9GbPjqGwl9BaW9yiC6hRdqUJOZcrHZG7RIK-yMv5UG8v3t87iPqgYvZMTMpJ7e2q8fNKieF4hCFtagI1eX6CSdHncmRZ7NQfaPR9FkFjgZZvyKx2rksVgec6bA2aGyvdX9IWQPhicuSv3FLNUBOF0GAjUsRU21GJ8KtQQ6HIiqR_WJY3iGmpWuZdeTyDx6ap2P3TEvvnEIhOZMgaNaDZYttUrAHGsscCafafQd6FGrqIWa506GanpFal0Acm1l0ju5UDSWhq7uuFMg33g3rGrtXY378FriU9-QY1zH_ulUhD17jxnNz4Avluf78NGfIrLPIKpJCwcy910_GPmdboXq2U8Gn0n_jNGUkCfsez5CDPQx3g9H3pKNvpUBa-wUxXnrzIMWSj6yvwE2lgwZLulWxX-wOlrNoFKHrHvbcQWxNxb2V3Z6h7g5Agj4_VVnz1ScLMyAv9bw-tYT-ey8al4qlWYB9jLpHPCL3PNqoOx93FmW_0O0" alt="Qrunchにおける記事更新の画面遷移" /></p> <p>PlantUMLはこちら</p> <pre><code class="plantuml:">@startuml title Qrunchにおける記事更新の画面遷移 hide empty description state "Qrunchトップ" as qrunch ' state "ダッシュボード" as dashboard { state "ダッシュボードトップ" as dashboard state "記事の管理" as console ' [*] -> dashboard.top ' dashboard.console -> [*] ' } state "記事" as entry state "更新完了" as updated entry : do / 更新すべき箇所を確認する [*] --> qrunch : https://qrunch.net を開く qrunch --> dashboard : 自身のアイコンから\n「ダッシュボード」メニューを選択する dashboard --> console : 「記事の管理」\nメニューを\n選択する console --> entry : まだ見ていない記事を開く\n[未確認記事が有る場合] entry -> updated : 更新する\n[更新内容が有る場合] updated --> console : 「記事の管理」メニューを\n選択する entry --> console : 戻る\n[更新内容が無い場合]\n/投稿未完了ポップアップの表示 console --> [*] : [未確認記事が無い場合] @enduml </code></pre> <p>そして、「記事を書く」ボタンを押しました。</p> <p>記事を書こうとしたところ、ちょっと思い立って、編集画面で1箇所も手を入れずに、戻りました。<br /> すると、ステートマシン図における「戻る」契機実施時と同様、「投稿未完了ポップアップ」が出たので、キャンセルを押下しました。</p> <p>「記事の管理」画面に戻ってくると、何やらタイトルも内容も書いてない記事が生成されているようにみえるじゃないですか(再現画像です)。<br /> (赤枠で囲った箇所です。 <del>え、どう見てもテーブルヘッダーですか?夜更かしで疲れてたんですよ!</del>)</p> <p><a href="https://crieit.now.sh/upload_images/508a5201cb112b81ce33104badfa82d75f79c827a4039.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/508a5201cb112b81ce33104badfa82d75f79c827a4039.png?mw=700" alt="テーブルヘッダーをタイトルおよび内容なし記事と勘違いした画面(再現画像)" /></a></p> <p>深く考えずに、チェックを入れます。<br /> すると、チェックを入れたすぐそばに「記事を削除する」メニューが登場しました(再現画像)。</p> <p><a href="https://crieit.now.sh/upload_images/55c6f8056a5d85b4920653eb8a31e0f25f79c8457d1c5.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/55c6f8056a5d85b4920653eb8a31e0f25f79c8457d1c5.png?mw=700" alt="全記事を削除するメニュー登場時の画面(再現画像)" /></a></p> <p>この時、僕は下の欄にある全ての記事にチェックが付いていることに気づきませんでした。<br /> 深く考えず、削除しようとします。</p> <p>すると、Qrunchくんは丁寧に「削除した記事は戻せません」と警告してくれます。<br /> 優しいです。</p> <p>でも、僕は空記事を削除したいので、気にせずOKします。</p> <hr /> <p>押した後、すぐには画面上に変化がありません。<br /> 空記事もそのまま残っているので、不思議だなと眺めていました。</p> <p>直後、気づきました。<br /> 「あれ、この欄って、空記事じゃなくてテーブルヘッダーじゃね?」と。</p> <p>焦るものの、まだ画面上には残っています。<br /> 一縷の望みをかけ、リロードします(悪手)。</p> <p>すると、リロードするたびに、記事が消えていくではありませんか!<br /> 焦りますが、それでも正常性バイアスにより、リロードを続ける手は止まりません。</p> <p><a href="https://crieit.now.sh/upload_images/4d4dc51b16e95c3b23b6ef0609bedd2e5f79c85f47aad.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/4d4dc51b16e95c3b23b6ef0609bedd2e5f79c85f47aad.png?mw=700" alt="全記事削除後の画面" /></a></p> <p>なんということでしょう。<br /> 綺麗になりましたね。</p> <h1 id="エンジニア魂に火がつく"><a href="#%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E9%AD%82%E3%81%AB%E7%81%AB%E3%81%8C%E3%81%A4%E3%81%8F">エンジニア魂に火がつく</a></h1> <p>焦りました。</p> <p>記事が無くなることで被る被害は、下記の通りです。</p> <ul> <li>記事の内容というドキュメントが消える</li> <li>記事の内容を再び第三者に見てもらう機会が消える</li> <li>過去の栄光が消える</li> </ul> <p>1番目と2番目の理由により、ドキュメントが消えるのは非常に困りました。<br /> また、プチバズった記事により今月(2020年4月現在)のQrunch「今日/今週/月間トレンド」第1位を総なめしたことで、僕の精神が支えられていたこともあり、3番目の理由によって非常に落胆してしまいました。</p> <p><a href="https://crieit.now.sh/upload_images/fe78d646abfe1aaa6d9409e816be31ea5f79c870c9cf7.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/fe78d646abfe1aaa6d9409e816be31ea5f79c870c9cf7.png?mw=700" alt="過去の栄光その1:今日/今週/今月のトレンド" /></a></p> <p><a href="https://crieit.now.sh/upload_images/06e0cf84427724405731beefbbdfc3a75f79c88622260.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/06e0cf84427724405731beefbbdfc3a75f79c88622260.png?mw=700" alt="過去の栄光その2:総アクセス数は5000超(そんなにすごくはないけど)" /></a></p> <p>こんな時、どうすればよいでしょうか?</p> <p>僕が最初に考えたのは、Qrunchのフィードバックで、全記事消しちゃいましたと泣き言を垂れることでした。<br /> しかし......<br /> 初期のころから応援している/何度もTwitterで記事を拡散してくれる/ときどき拍手を50個くらいくれる......<br /> そんなQrunch運営に「泣きつく手段がフィードバックかよ」と冷静になり、踏みとどまりました。</p> <p>次に考えたのが、報告記事にすることでした。<br /> Qrunch運営なら、きっと見てくれるだろう。<br /> そんな期待を込めて、「消えちゃいました!助けてください」という報告記事を書こうと思いました。<br /> <del>(既にキャプチャ画像にタイトルだけの記事の下書きを作ってるのが見えてますね)</del><br /> これなら、別に見てもらわなくても、ポエム記事として書けば正当化できます。</p> <p>しかし、書こうとする直前で思いつきました。<br /> せっかくなら、エンジニアらしく、記事を復活させてみよう、と。<br /> 運営の手間を取らせなくても、自分だけでできることをしてみよう、と。</p> <p>ここで、僕の記事の内容は変わりました。</p> <h1 id="Qrunchの記事を削除してしまった際の手順"><a href="#Qrunch%E3%81%AE%E8%A8%98%E4%BA%8B%E3%82%92%E5%89%8A%E9%99%A4%E3%81%97%E3%81%A6%E3%81%97%E3%81%BE%E3%81%A3%E3%81%9F%E9%9A%9B%E3%81%AE%E6%89%8B%E9%A0%86">Qrunchの記事を削除してしまった際の手順</a></h1> <p>長い前段は終わりです。<br /> ここからが、本記事の主題です。</p> <p>すなわち、もしQrunchの記事を削除(全削除)してしまった場合、どうすればよいかの手順をここに記します。<br /> 僕が実際に行った事のうち、成果があったものについてのみ書きます(効果がなかったけど試してみたことについては、後程書きます)。</p> <p>動作確認環境を、以下に記します。</p> <ul> <li>Windows 10 Pro: version 1909, OS Build 18363.778</li> <li>Google Chrome: version 80.0.3987.163(Official Build), 64 ビット</li> </ul> <h2 id="ブラウザ上のWebページを遷移させないように保存する"><a href="#%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E4%B8%8A%E3%81%AEWeb%E3%83%9A%E3%83%BC%E3%82%B8%E3%82%92%E9%81%B7%E7%A7%BB%E3%81%95%E3%81%9B%E3%81%AA%E3%81%84%E3%82%88%E3%81%86%E3%81%AB%E4%BF%9D%E5%AD%98%E3%81%99%E3%82%8B">ブラウザ上のWebページを遷移させないように保存する</a></h2> <p>まず大切なのは、現場保存です。<br /> やみくもに動いてしまうのは、逆効果になりかねません。</p> <p>まず、いま開いているQrunchの画面を表示しているブラウザ(タブ)を、残しておきましょう。<br /> Chromeの場合、裏で待機しているタブ画面を呼出す際に、強制的に再読込する場合があるため、別ウィンドウで置いておくと良いでしょう。</p> <p>また、HTML形式でローカル保存しておきましょう。<br /> もし記事が残っている画面で保存できれば、記事のタイトル/タグ/URL等を記録できます。</p> <p>僕は、偶然にも別タブでQrunchブログを開いていたため、そちらをローカル保存しました。</p> <h2 id="編集画面を戻る"><a href="#%E7%B7%A8%E9%9B%86%E7%94%BB%E9%9D%A2%E3%82%92%E6%88%BB%E3%82%8B">編集画面を戻る</a></h2> <p>偶然にも、僕は直前まで記事の編集をしていました。<br /> そこで、開いているタブを戻ると、なんと、記事がそのまま残っているじゃないですか!</p> <p>しかし、「記事を更新する」ボタンを押下すると、下記画面に遷移してしまいます。</p> <p><a href="https://crieit.now.sh/upload_images/01518f2cd30c5970255cc332105144af5f79c8a1c77f9.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/01518f2cd30c5970255cc332105144af5f79c8a1c77f9.png?mw=700" alt="一時的なエラー画面" /></a></p> <p>そこで、記事の内容をコピーし、別記事として新規作成することで、記事の内容を避難させました。<br /> (新着記事を荒らしてしまいました、すみません。)</p> <p><a href="https://crieit.now.sh/upload_images/e0fcea5301140cd66598e2abf1b77a1e5f79c8f8ec26b.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e0fcea5301140cd66598e2abf1b77a1e5f79c8f8ec26b.png?mw=700" alt="新着記事を荒らしている様子" /></a></p> <p>僕の場合は、全8記事中6記事を更新したため、6記事はそのまま再作成できました。</p> <h2 id="Googleキャッシュに頼る"><a href="#Google%E3%82%AD%E3%83%A3%E3%83%83%E3%82%B7%E3%83%A5%E3%81%AB%E9%A0%BC%E3%82%8B">Googleキャッシュに頼る</a></h2> <p>残り2記事ですが、うち片方の記事は大した内容を書いていないため、無くなっても問題ありません。<br /> しかし、もう1つの方の記事は、アドベントカレンダーにも連携しており、またビューも多かった、思い入れのある記事でした。<br /> この内容が消えるのだけは避けたかったです。</p> <p>そこで、閃きました。<br /> ビューが多いなら、Googleキャッシュにあるんじゃないだろうか?と。</p> <p>調べてみると、なんと......<br /> ありました!!</p> <p><a href="https://crieit.now.sh/upload_images/c60d9a02a0a9bc766ca6216a921b3fa65f79c90b4f4f8.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/c60d9a02a0a9bc766ca6216a921b3fa65f79c90b4f4f8.png?mw=700" alt="Googleキャッシュで記事を検索している様子" /></a></p> <p>キャッシュしているWebページのHTMLを展開し、内容をタグごと直接記事にコピペすれば復活できます。</p> <p><a href="https://crieit.now.sh/upload_images/e8b5364e19324ef19ebc740c0bcf8f525f79c91f4e97b.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e8b5364e19324ef19ebc740c0bcf8f525f79c91f4e97b.png?mw=700" alt="キャッシュ済みWebページのHTMLをコピーしている様子" /></a></p> <p>これで、ほぼ全ての記事を復活できました。</p> <h1 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h1> <p>記事の内容は復活できましたが、記事の記録は復活できませんでした。<br /> しかし今は、ドキュメントさえ残ってくれたら、あまり気にすることはないかなと考えています。<br /> トレンド1位という記録に浮かれすぎていた自分には、いい薬だったかもしれませんね。</p> <p>まとめると、以下の通りです。</p> <ul> <li>Qrunchの記事を全削除しちゃいました</li> <li>頑張って復活させました</li> <li>一部復活できなかったものがありますが気にしてません</li> <li>仮に戻せるとしても、現状で特段困っていないので問題ありません</li> </ul> <h1 id="追記"><a href="#%E8%BF%BD%E8%A8%98">追記</a></h1> <p>なんと、Qrunch開発者である @codomisu さんから、直々にコメントをいただきました。<br /> バックアップがあるとのことだったので、復旧をお願いしたところ、全て復旧していただけました。</p> <p>しかも、僕が頑張って復活させた記事については、下書きへと変更してくださる気の利きように、感服いたしました。<br /> 復旧を確認次第、手動復活記事は消そうと思っていたので、ありがたかったです。</p> <p>その上、実はここで一切触れていない下書き記事についても、復旧していただけました!<br /> 下書き記事については、そもそも要らないかなと無視していたのと、公開されてないし無理だろうと諦めていたので、まさか戻ってくるとは思いませんでした。</p> <p>新たにまとめると、運営に泣きつけば全て解決していたのでは?というオチでした!!!<br /> <del>@codomisu さんには頭が上がりません。またファンになってしまうじゃないですか。</del></p> <p>以上です、ご清覧ありがとうございました。</p> <h1 id="おまけと追記"><a href="#%E3%81%8A%E3%81%BE%E3%81%91%E3%81%A8%E8%BF%BD%E8%A8%98">おまけと追記</a></h1> <h2 id="要望"><a href="#%E8%A6%81%E6%9C%9B">要望</a></h2> <p>Qrunch運営さんがこの記事を読んでくれた時のために、要望を書いておきます。</p> <ul> <li>記事一覧のテーブルヘッダーは、色を付けるなど、テーブルデータとの差異を強くしてほしい</li> <li>記事削除時のメッセージは、別の場所に表示してほしい</li> <li>(余力があれば)ユーザーによる削除処理ロールバックを可能にしてほしい</li> </ul> <p>Qrunch開発者の @codomisu さんが検討してくださるとのことです。<br /> ありがとうございます!</p> <h2 id="旧記事URL"><a href="#%E6%97%A7%E8%A8%98%E4%BA%8BURL">旧記事URL</a></h2> <p>削除してしまった旧記事のタイトルおよびURLを、下記に記します。<br /> 保存できなかった記事については、 <code>⭐</code> 絵文字を併記しています。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://morichan.qrunch.io/entries/JG2FTJ8VRE6amV3T">YAPC::Tokyoの感想</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://morichan.qrunch.io/entries/3n3Rsvp6njvRJP7l">UMLのクラス図における関係の考察</a></li> <li>⭐ <a target="_blank" rel="nofollow noopener" href="https://morichan.qrunch.io/entries/TXygGMXlliMojzye">そのまま使えるGitHub事始め</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://morichan.qrunch.io/entries/uhFFiglG0UDfJIy0">vimrcファイル(環境設定ファイル全般)はGitHubで管理するといいのではないか</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://morichan.qrunch.io/entries/Ry4qc9vnjI1JFXnB">実践UML記述法:スクリプト言語(Python, Perl, PHPなどなど)における可視性をUMLで記述する1考察</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://morichan.qrunch.io/entries/ni2p1QmGObHGkmlQ">企業に所属する前に、大学で学んで良かったこと、もっと学んでおけば良かったこと</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://morichan.qrunch.io/entries/vPBgC4zerbyydWrr">PowerPointのスライドサイズ制限対策あれこれ</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://morichan.qrunch.io/entries/NR8e5w8gXTHxJjUD">1週間の在宅勤務で得た知見:その利点と欠点</a></li> </ul> <p>こちら、 @codomisu さんの手動復旧により、全て回復しました。</p> <h2 id="試してみたが駄目だったこと"><a href="#%E8%A9%A6%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F%E3%81%8C%E9%A7%84%E7%9B%AE%E3%81%A0%E3%81%A3%E3%81%9F%E3%81%93%E3%81%A8">試してみたが駄目だったこと</a></h2> <p>「Qrunchの記事を削除してしまった際の手順」として試してみたが効果が無かったものについて、下記に示します。</p> <h3 id="Chromeキャッシュの呼出し"><a href="#Chrome%E3%82%AD%E3%83%A3%E3%83%83%E3%82%B7%E3%83%A5%E3%81%AE%E5%91%BC%E5%87%BA%E3%81%97">Chromeキャッシュの呼出し</a></h3> <p>Chromeのキャッシュに記事内容が保存されていることを期待して、 <a target="_blank" rel="nofollow noopener" href="https://www.nirsoft.net/utils/chrome_cache_view.html">ChromeCacheView</a> を使ってみました。<br /> 実際に保存されている記事もあったものの、その全ては別手段で取得できるものでした。</p> <p>また、キャッシュの中からjQueryを発見したので、URLが直接書いてあったりしないかと期待して探したのですが、当然のようにありませんでした。</p> <h3 id="アーカイブサイトの利用"><a href="#%E3%82%A2%E3%83%BC%E3%82%AB%E3%82%A4%E3%83%96%E3%82%B5%E3%82%A4%E3%83%88%E3%81%AE%E5%88%A9%E7%94%A8">アーカイブサイトの利用</a></h3> <p>アーカイブサイトを閲覧するために、僕が時々使う <a target="_blank" rel="nofollow noopener" href="https://archive.org/">Internet Archive: Digital Library of Free & Borrowable Books, Movies, Music & Wayback Machine</a> を利用してみました。<br /> 実際には、Qrunchトップページしか保存していないようでした(ブログの規模によって異なる可能性あり)。</p> Morichan tag:crieit.net,2005:PublicArticle/16101 2020-10-04T23:20:15+09:00 2020-10-04T23:20:15+09:00 https://crieit.net/posts/1-5f79da1fa68ac 1週間の在宅勤務で得た知見:その利点と欠点 <p>本記事は、 Qrunch からの移転記事です。</p> <p>移転元: <a target="_blank" rel="nofollow noopener" href="https://morichan.qrunch.io/entries/NR8e5w8gXTHxJjUD">1週間の在宅勤務で得た知見:その利点と欠点 - 雑木林</a></p> <h1 id="TL; DR"><a href="#TL%3B+DR">TL; DR</a></h1> <p>在宅勤務の利点と欠点は、個人差があると考えます。<br /> 私は在宅勤務したい派ですので、利点が多めに存在します。</p> <p>皆さんも可能であれば、1度は在宅勤務を経験して、在宅勤務の利点/欠点を探してみてください。</p> <h1 id="はじめに"><a href="#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB">はじめに</a></h1> <p><a target="_blank" rel="nofollow noopener" href="https://www.who.int/health-topics/coronavirus">とある問題</a>に対応するため、昨今では在宅勤務へと舵を切らざるを得ない企業が増えています。</p> <p>弊社も、制度としての在宅勤務は認められているものの、実際に利用している方は多くない印象でした。<br /> しかし、弊社でも「在宅勤務を推奨する」との通達が下りました。</p> <p>私の所属しているチームでは、ほぼ全員が在宅勤務を実施することになり、先日で丁度1週間が経過しました。</p> <p>個人的には、在宅勤務をしてみたいという欲望が渦巻くさなかの出来事であり、棚ぼた気分で1週間を過ごしました。<br /> そこで得た知見、いわゆる在宅勤務の利点と欠点を、ここにまとめます。</p> <h1 id="在宅勤務の利点"><a href="#%E5%9C%A8%E5%AE%85%E5%8B%A4%E5%8B%99%E3%81%AE%E5%88%A9%E7%82%B9">在宅勤務の利点</a></h1> <p>私が感じた、在宅勤務の利点は、以下の通りです。<br /> 各項目について、それぞれ説明します。</p> <ul> <li>満員電車に乗る必要が無い</li> <li>朝の時間でゆったりできる</li> <li>だらだらと残業しない</li> <li>無駄な外食が減る</li> <li>洗濯物を干せる</li> <li>文章によるコミュニケーションをしっかりするようになる</li> <li>うるさくても許される</li> </ul> <h2 id="満員電車に乗る必要が無い"><a href="#%E6%BA%80%E5%93%A1%E9%9B%BB%E8%BB%8A%E3%81%AB%E4%B9%97%E3%82%8B%E5%BF%85%E8%A6%81%E3%81%8C%E7%84%A1%E3%81%84">満員電車に乗る必要が無い</a></h2> <p>在宅勤務の利点として、よく上げられる項目の1つです。</p> <p>私自身、満員電車で苦痛を感じることは無いと思っていました。<br /> しかし、電車に乗らない生活を1週間続けていると、心の変化をかなり実感できました。</p> <p>簡単に言うと、朝から集中できます。</p> <p>今思えば、電車から下車する際、疲れを感じていた気がします。<br /> 下りた時のホッとする感情は、車内で緊張している証拠だと言えます。<br /> つまり、朝の集中力が、満員電車に吸い取られているわけです。</p> <p>その集中力を、業務に充てることができ、心なしか朝の集中力が上がったように感じます。</p> <h2 id="朝の時間でゆったりできる"><a href="#%E6%9C%9D%E3%81%AE%E6%99%82%E9%96%93%E3%81%A7%E3%82%86%E3%81%A3%E3%81%9F%E3%82%8A%E3%81%A7%E3%81%8D%E3%82%8B">朝の時間でゆったりできる</a></h2> <p>通勤時間が減るため、朝と夕の両方で、それぞれ1時間の空白ができます。<br /> 私は、その朝の時間をゆったりする時間に充てています。</p> <p>ゆったりするとは、単純に寝ているわけではなく、起きる時間はいつもと同じに設定しています。<br /> ただし、目を覚ました後は、いつ布団から出てもよい時間としています。</p> <p>この利点は、朝から急ぐ必要が無くなる、というものです。</p> <p>朝の時間は貴重だ、とよく言われますが、その理由は時間が無いからだと考えます。<br /> にもかかわらず、私は贅沢にも、朝1時間をゆったりする時間として設定しているわけです。</p> <p>そのうえ、今までは必須であった朝のタスクが、在宅勤務により減ります。<br /> 具体的には、着替えや髭剃りやお化粧などです。<br /> これらは、テレビ会議必須のチームでは結局しなければなりませんが、私のチームでは、夕方にテレビ会議があるため、朝していた着替え等を、昼休み以降にずらすことができます。</p> <p>この効果は想像以上でした。<br /> 目が覚めてしばらくはスマホを眺めつつ、だらだらと起きて顔を洗い、軽い食事を済ませてPCに向かうわけです。<br /> その頃には、完全に脳みそが起きていることを実感できます。</p> <p>よく、在宅勤務の欠点としてオンオフの切替ができない、というものが挙げられますが、私はこの時間を設定することで、PCに向かう瞬間にスイッチを切換えやすくすることができました。</p> <h2 id="だらだらと残業しない"><a href="#%E3%81%A0%E3%82%89%E3%81%A0%E3%82%89%E3%81%A8%E6%AE%8B%E6%A5%AD%E3%81%97%E3%81%AA%E3%81%84">だらだらと残業しない</a></h2> <p>だらだらと残業してしまう癖がある方は、もしかしたら会社から出るのが億劫だからではないでしょうか?</p> <p>私はまさにそうで、会社から出る前に、外の天気を調べたり、忘れ物が無いかを確認したりする時間で、そのまま5分10分と居ついてしまうことが珍しくありませんでした。<br /> 在宅勤務では、外の天気を調べる必要も、忘れ物の確認も必要ありません。<br /> 終わるときは「終わります」と一報を入れて終わりです。</p> <p>これも、前述の在宅勤務の欠点としてよく挙げられるオンオフの切替に一役買っていると考えています。</p> <h2 id="無駄な外食が減る"><a href="#%E7%84%A1%E9%A7%84%E3%81%AA%E5%A4%96%E9%A3%9F%E3%81%8C%E6%B8%9B%E3%82%8B">無駄な外食が減る</a></h2> <p>在宅勤務ということは、キッチンも冷蔵庫もあるわけです(無い場合もありますが)。<br /> であれば、わざわざレストランやコンビニに寄らずとも、自宅で適当に調理すれば済みます。</p> <p>私は料理を全くしない人間ですが、保存がきくパン類を事前に買いだめしておき、仕事中はモグモグして業務に従事しています。</p> <p>事前に買いだめするということは、単価の高いコンビニではなく、比較的安価なスーパーで購入できます。<br /> レストランに行く必要も無くなりました。<br /> 移動という運動もしなくなり、消費する食品量自体も減っている気がします。</p> <p>詳細に計算したわけではないですが、食費については体感1/3まで減少しています。</p> <h2 id="洗濯物を干せる"><a href="#%E6%B4%97%E6%BF%AF%E7%89%A9%E3%82%92%E5%B9%B2%E3%81%9B%E3%82%8B">洗濯物を干せる</a></h2> <p>洗濯物を朝から干している方は、凄いです。</p> <p>私は、家を出る15分前に起きるダメ人間ですので、朝から干すためには、前日に洗濯機を回さなければ、洗濯物を干すことができません。<br /> つまり、前日に洗濯機を回し損ねると、丸1日洗濯できない日が増えてしまいます。</p> <p>在宅勤務では、洗濯機を朝から回しても、昼に干せば問題ありません。<br /> 布団だって、今までより干しやすくなります。</p> <p>朝したいけど、時間が無くて諦めていたことができるようになると、生活の幅が広がります。</p> <h2 id="文章によるコミュニケーションをしっかりするようになる"><a href="#%E6%96%87%E7%AB%A0%E3%81%AB%E3%82%88%E3%82%8B%E3%82%B3%E3%83%9F%E3%83%A5%E3%83%8B%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E3%81%97%E3%81%A3%E3%81%8B%E3%82%8A%E3%81%99%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%AA%E3%82%8B">文章によるコミュニケーションをしっかりするようになる</a></h2> <p>現在のチームでは、Slackを利用したチームメンバー間のコミュニケーションを取っています。<br /> 以前までは対面とSlackの区別ができておらず、どちらを使ってコミュニケーションを取ればよいのかがわかっていませんでした。</p> <p>在宅勤務では、強制的にSlackでのコミュニケーションを強制させられます。<br /> これにより、齟齬のない文章で状況を伝えたり、<a target="_blank" rel="nofollow noopener" href="https://note.com/vaaaaanquish/n/ncc512cf0e263">timesチャンネル</a>で自身の状況を常時報告したりする機会が増えました。</p> <p>また、在宅勤務では、相手の状況がわかりません。<br /> そのために、どれだけ忙しいのか、機嫌が良いのか悪いのか、文面からは何も見えてきません。</p> <p>人によっては、上記をデメリットと感じる方もいますが、私はメリットと感じています。<br /> つまり、何も考えずに質問したり、報告したりできるわけです。</p> <p>私は、対面で質問する場合、どうしても相手の顔色を窺ってしまう癖があります。<br /> 文面では、相手の顔が見えないため、怪訝な顔をされていても、私には伝わりません。<br /> 物怖じせずに質問でき、それにより業務が進み、Win-Winの関係になっているんじゃないかな、と考えています。</p> <p><del>......決して、話しづらい人がいるわけではありません。私が人一倍、相手の顔色に敏感なだけです。</del></p> <h2 id="うるさくても許される"><a href="#%E3%81%86%E3%82%8B%E3%81%95%E3%81%8F%E3%81%A6%E3%82%82%E8%A8%B1%E3%81%95%E3%82%8C%E3%82%8B">うるさくても許される</a></h2> <p>BGM流し放題、独り言し放題です。<br /> キーボードを強く叩いても怒られませんし、<a target="_blank" rel="nofollow noopener" href="https://togetter.com/li/1356294">にゃーんと言いすぎて解雇</a>されることもありません。</p> <p>逆に、周りがうるさいことも気にしないで済みます。<br /> 向かいの人のキーボード打鍵音が気になりますか?後ろの人の悪態が気になりますか?隣を歩く人が気になりますか?誰かの貧乏ゆすりで揺れる机が気になりますか?どこからか聞こえるドローンの音が気になりますか?</p> <p>それらが全て、在宅勤務で無くなります。</p> <h1 id="在宅勤務の欠点"><a href="#%E5%9C%A8%E5%AE%85%E5%8B%A4%E5%8B%99%E3%81%AE%E6%AC%A0%E7%82%B9">在宅勤務の欠点</a></h1> <p>私が感じた、在宅勤務の欠点は、以下の通りです。<br /> 各項目について、それぞれ説明します。</p> <ul> <li>運動しない</li> <li>日に当たらない</li> </ul> <h2 id="運動しない"><a href="#%E9%81%8B%E5%8B%95%E3%81%97%E3%81%AA%E3%81%84">運動しない</a></h2> <p>1週間の平均歩数が、5000歩以上だった前週と比べ、なんと191歩まで下がってしまいました。<br /> 私が行う唯一の運動が歩行である現在、その歩行距離の極端な減少は大きな問題となるはずです。</p> <p>今は若さという力で無理やり抑えていますが、今後は意識的に運動する必要があるかもしれません。</p> <h2 id="日に当たらない"><a href="#%E6%97%A5%E3%81%AB%E5%BD%93%E3%81%9F%E3%82%89%E3%81%AA%E3%81%84">日に当たらない</a></h2> <p>実は1週間、ほとんどカーテンを開けずに生活していました。<br /> 誰が見ても、健康に良くないことは一目瞭然です。</p> <p>意識的にカーテンを開けるようにする必要はありそうです。</p> <h1 id="おわりに"><a href="#%E3%81%8A%E3%82%8F%E3%82%8A%E3%81%AB">おわりに</a></h1> <p>まだ1週間ですから、欠点についてはそれほど深刻に考えていません。<br /> 利点についても、これから少しづつ増えていく可能性はあります。</p> <p>また、一般的によく言われる利点としての「使える時間が増える」ということについては、私がゆったりする時間として使っているため、そこまでメリットとしては感じていません。<br /> 夕方の時間は普通に増えているので、今後は何かできたらいいなと考えてはいます。</p> <p>個人的に、在宅勤務か出社勤務のどちらが良いかと聞かれたら、今は間違いなく在宅勤務を選びます。<br /> 在宅勤務は好き嫌いがはっきりしやすいと思うので、社会人全員が在宅勤務を実施するとは考えていません(し、全員ができるとも思っていません)。<br /> しかし、選択肢が増えることはいいことですね。</p> Morichan tag:crieit.net,2005:PublicArticle/16100 2020-10-04T23:19:34+09:00 2020-10-04T23:19:34+09:00 https://crieit.net/posts/PowerPoint PowerPointのスライドサイズ制限対策あれこれ <p>本記事は、 Qrunch からの移転記事です。</p> <p>移転元: <a target="_blank" rel="nofollow noopener" href="https://morichan.qrunch.io/entries/vPBgC4zerbyydWrr">PowerPointのスライドサイズ制限対策あれこれ - 雑木林</a></p> <h1 id="TL; DR"><a href="#TL%3B+DR">TL; DR</a></h1> <p>下記に、3原則を記します。</p> <ul> <li>デザインは大きく変わる覚悟をすべし</li> <li>たくさんの手段の中から1つづつ試しすべし</li> <li>地道な努力がサイズ削減の達成を約束するだろう</li> </ul> <p>ユーザーの声も募集しています。</p> <blockquote> <p>某社員<br /> 私は40MBのパワポを2MBまで削減できました!</p> </blockquote> <h1 id="はじめに"><a href="#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB">はじめに</a></h1> <p>社内の規定などで、PowerPointのスライド(以降、パワポと呼ぶ)サイズ制限をかけているような場合、せっかく綺麗に作ったパワポが提出できない、なんてことがあったりします。<br /> それでなくても、常日頃から容量も125GBしかないようなちんけなPCを使っている場合 <del>(えらく具体的ですね)</del> 、データサイズとの戦いは日常茶飯事です。</p> <p>最初からサイズ容量を超えないように作ることも大事ですが、保存するごとにサイズが大きくなっていく様を見続けてパワポ作成を続けるのは、精神衛生的によろしくありません。</p> <p>最初はサイズを無視して作成しつつ、後でサイズを下げる方法は、一見遠回りをしているようでいて、実はサイズと戦う時間を一括にまとめるという、きわめて効率的/合理的な手法だと考えます [要検証] 。</p> <p>本記事では、どのような削減方法があるのか、何をすればよいのかを、1つづつ紹介していきます。<br /> <del>サイズ制限のために画像はありません。</del></p> <h1 id="事前準備"><a href="#%E4%BA%8B%E5%89%8D%E6%BA%96%E5%82%99">事前準備</a></h1> <h2 id="パワポサイズ肥大化の原因特定"><a href="#%E3%83%91%E3%83%AF%E3%83%9D%E3%82%B5%E3%82%A4%E3%82%BA%E8%82%A5%E5%A4%A7%E5%8C%96%E3%81%AE%E5%8E%9F%E5%9B%A0%E7%89%B9%E5%AE%9A">パワポサイズ肥大化の原因特定</a></h2> <p>パワポのファイル、いわゆる <code>.ppt</code> や <code>.pptx</code> ファイルが、zipファイルの拡張子違いであることは、意外と知られていません。</p> <p>まずは、作成した <code>.ppt</code> または <code>.pptx</code> ファイルをコピーし、コピーしたパワポファイルの拡張子を <code>.zip</code> 拡張子に置換えてみましょう。<br /> その後、コピーしたzipファイルを解凍すれば、中身が出現します。<br /> これにより、どのファイルがサイズ肥大化の原因となっているかを判断できます。</p> <p>主に画像ファイルが圧倒的にでかいため、そちらを見てみましょう。<br /> 解凍したディレクトリ内の <code>ppt/media/</code> ディレクトリに入っていると思います。<br /> 明らかに大きな画像ファイルがあれば、そのファイルが本当に必要かどうかを考えておくのも大切です。</p> <h2 id="画像ファイルの種類や保存形式"><a href="#%E7%94%BB%E5%83%8F%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E7%A8%AE%E9%A1%9E%E3%82%84%E4%BF%9D%E5%AD%98%E5%BD%A2%E5%BC%8F">画像ファイルの種類や保存形式</a></h2> <p>PNGファイルは縦横の大きさを小さくしても、大きくする際に戻しやすい(可逆圧縮)性質があります。<br /> 一方、JPGファイルはその逆で、大きくしようとするとのっぺりとなりやすい(不可逆圧縮)性質があります。</p> <p>可逆圧縮と不可逆圧縮のどちらが優れているかはTPOで異なりますが、データサイズの観点から見れば、不可逆圧縮形式のファイルのほうがデータサイズは小さいため、本記事の対象としては優位性が高いです。</p> <p>他にも、たとえば画像ファイルの種類、ビットマップ形式であるJPGやPNGとベクター形式であるSVGの違いや、具体的な保存方法などを知っておくと、どうすれば画像ファイルのデータサイズが削減できるか、といったことが理解しやすくなります。</p> <h1 id="実践"><a href="#%E5%AE%9F%E8%B7%B5">実践</a></h1> <p>事前準備ができたら、あとはパワポサイズを削減してみましょう。</p> <h2 id="PDFにする"><a href="#PDF%E3%81%AB%E3%81%99%E3%82%8B">PDFにする</a></h2> <p>意外と盲点ですが、 <code>.ppt</code> または <code>.pptx</code> 形式である必要がないなら、いっそのことPDFファイルにしましょう。<br /> 40MB程度のパワポが6MB程度まで減るので、もし可能であれば試してみてください。</p> <p>欠点としては、それより下げる方法がない、ある意味では最終手段ということですが......</p> <h2 id="フォント埋込みを諦める"><a href="#%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88%E5%9F%8B%E8%BE%BC%E3%81%BF%E3%82%92%E8%AB%A6%E3%82%81%E3%82%8B">フォント埋込みを諦める</a></h2> <p>どんなにデータサイズが小さなパワポでも、フォント埋込みをした瞬間に6MBくらい増えてしまいます。<br /> 10MB程度なら許してもらえる環境であればよいですが、2MBレベルを求められる環境では無理です、諦めてください。</p> <p>実際に発表で利用する場合は、フォント埋込みの代わりに画像として置換える、なんて技もあります。</p> <p>もし、課題の提出用であれば、フォント埋込みをする必要もないかもしれません。<br /> 代わりにトップ画面にでかでかと「〇〇フォントを利用していますが、埋込めませんでした!」って書いておけば、デザインについてとやかく言われることは無いのではないでしょうか?</p> <h2 id="画像のアート効果で容量肥大化を防ぐ"><a href="#%E7%94%BB%E5%83%8F%E3%81%AE%E3%82%A2%E3%83%BC%E3%83%88%E5%8A%B9%E6%9E%9C%E3%81%A7%E5%AE%B9%E9%87%8F%E8%82%A5%E5%A4%A7%E5%8C%96%E3%82%92%E9%98%B2%E3%81%90">画像のアート効果で容量肥大化を防ぐ</a></h2> <p>PowerPointの機能として、「画像のアート効果」を選べるものがあります。<br /> これは、普通の画像を簡単に「マーカー手書き風」にしてくれたり、「フィルム粒子風」にしてくれたりするため、意外と使える場面が多くて重宝できます。</p> <p>しかし、中にはデータサイズ肥大化に貢献してしまうアート効果というものもあります。<br /> 例えば「フィルム粒子」効果では、画像をドットレベルでザラザラにするため、非常にデータサイズが大きくなります。<br /> このような、データサイズを大きくしやすいアート効果はなるべく使わないようにしたいです。</p> <h2 id="画像の必要性を考える"><a href="#%E7%94%BB%E5%83%8F%E3%81%AE%E5%BF%85%E8%A6%81%E6%80%A7%E3%82%92%E8%80%83%E3%81%88%E3%82%8B">画像の必要性を考える</a></h2> <p>本当にその画像が必要か、考えることも大切です。</p> <p>セクションごとにスライドを挿入している場合、そこに表示する画像は本当に必要か?図形で代用できないか?などを考えてみましょう。<br /> 意外と不必要な画像を使っていることは多いです。</p> <h2 id="複雑な図形は1枚の画像に置換える"><a href="#%E8%A4%87%E9%9B%91%E3%81%AA%E5%9B%B3%E5%BD%A2%E3%81%AF1%E6%9E%9A%E3%81%AE%E7%94%BB%E5%83%8F%E3%81%AB%E7%BD%AE%E6%8F%9B%E3%81%88%E3%82%8B">複雑な図形は1枚の画像に置換える</a></h2> <p>1スライドに何枚も画像を入れている場合、それらすべてを1枚の画像として貼り付けることで、データサイズを削減できることがあります。<br /> 特に、1スライドだけにしか使ってないような画像がたくさんある場合に重宝する手法です。</p> <h2 id="画像を圧縮する"><a href="#%E7%94%BB%E5%83%8F%E3%82%92%E5%9C%A7%E7%B8%AE%E3%81%99%E3%82%8B">画像を圧縮する</a></h2> <p>スライドで利用している画像ファイルサイズを、直接圧縮できる機能があります。</p> <p>下記の参考ページなどで紹介されていますが、「パワポ 画像 圧縮」で調べてもたくさん出てきます。<br /> 脳死で「電子メール用」レベルまで圧縮しましょう。</p> <blockquote> <p>「PowerPoint」で作成した重い資料の容量(サイズ)を下げる方法 | @niftyIT小ネタ帳<br /> <a target="_blank" rel="nofollow noopener" href="https://koneta.nifty.com/koneta_detail/180928000645_1.htm">https://koneta.nifty.com/koneta_detail/180928000645_1.htm</a></p> </blockquote> <h2 id="スライド自体を画像にする"><a href="#%E3%82%B9%E3%83%A9%E3%82%A4%E3%83%89%E8%87%AA%E4%BD%93%E3%82%92%E7%94%BB%E5%83%8F%E3%81%AB%E3%81%99%E3%82%8B">スライド自体を画像にする</a></h2> <p>下記のような参考ページでも書いてありますが、フォント埋込みを諦めた時点で、デザインの崩壊は防げません。<br /> しかし、1枚のスライドを丸々画像にすることで、デザインを維持しつつデータサイズを削減できることがあります。</p> <blockquote> <p>フォントの埋め込みだけじゃない! – 環境に依存しないプレゼン資料の作り方 3種 | The Power of PowerPoint<br /> <a target="_blank" rel="nofollow noopener" href="https://thepopp.com/フォントの埋め込みだけじゃない-フォントイン/">https://thepopp.com/フォントの埋め込みだけじゃない-フォントイン/</a></p> </blockquote> <p>注意点ですが、全スライドを画像にすると、逆にデータサイズが大きくなることもあります。<br /> 各スライドごとに変更してみて、データサイズ遷移を見守ってください。</p> <h1 id="おわりに"><a href="#%E3%81%8A%E3%82%8F%E3%82%8A%E3%81%AB">おわりに</a></h1> <p>テラバイトが当たり前の時代になっても、いまだにサイズ制限をかけているのは時代錯誤も甚だしいですね。<br /> とはいえ、1個人が現状を大きく変えることは難しいです。<br /> できることをやりつつ、もし偉くなったら「サイズ制限なんて無くそう」と言ってください。</p> Morichan tag:crieit.net,2005:PublicArticle/16099 2020-10-04T23:18:52+09:00 2020-10-04T23:37:31+09:00 https://crieit.net/posts/edbca6f6b9d3492bdeebf80276138151 企業に所属する前に、大学で学んで良かったこと、もっと学んでおけば良かったこと <p>本記事は、 Qrunch からの移転記事です。</p> <p>移転元: <a target="_blank" rel="nofollow noopener" href="https://morichan.qrunch.io/entries/ni2p1QmGObHGkmlQ">企業に所属する前に、大学で学んで良かったこと、もっと学んでおけば良かったこと - 雑木林</a></p> <h1 id="TL; DR"><a href="#TL%3B+DR">TL; DR</a></h1> <p>必要になって、自ずと勉強できれば、それで大丈夫です。<br /> 気軽に生きていきましょう。</p> <p>でも、読書だけはガチでやっておきましょう。<br /> 大学で読みたい本は、全て読み切ることをオススメします。</p> <h1 id="社会人枠です"><a href="#%E7%A4%BE%E4%BC%9A%E4%BA%BA%E6%9E%A0%E3%81%A7%E3%81%99">社会人枠です</a></h1> <p>本記事は、<a target="_blank" rel="nofollow noopener" href="https://qiita.com/advent-calendar/2019/university-of-miyazaki">宮崎大学アドベントカレンダー2019</a>における8日目のエントリー記事です。</p> <p>ペーペーですが、これでも社会人として生活しています。<br /> ちょっと前まで学生だったので、学生時代に得たものを整理したいなと思いました。</p> <p>学生さんは、ご参考までに、今後の学生時代を謳歌してください。<br /> そうでない方は、自分もこんな時代があったと、ノスタルジーに浸ってください。</p> <h1 id="学んで良かったこと"><a href="#%E5%AD%A6%E3%82%93%E3%81%A7%E8%89%AF%E3%81%8B%E3%81%A3%E3%81%9F%E3%81%93%E3%81%A8">学んで良かったこと</a></h1> <p>以降、大学で学んで良かったことを記述します。<br /> 自慢話みたいなものです、温かく眺めてください。</p> <h3 id="対人コミュニケーション"><a href="#%E5%AF%BE%E4%BA%BA%E3%82%B3%E3%83%9F%E3%83%A5%E3%83%8B%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3">対人コミュニケーション</a></h3> <p>学生時代にお酒を飲むようにしていたのは、社会人はお酒を飲めたほうがいいのかな、と漠然と考えていたからですが、大当たりでした。<br /> 私の所属しているプロジェクトチームは、学生時代の研究室以上に飲み会が多く、2次会も何度かありました。<br /> 2次会を楽しめる人間でよかったなと、2次会に参加するたびに思っています(だいたい奢ってくれます)。</p> <p>あまり口数は多くないですが、Slackなどのコミュニケーションツールでは喋るようにしています。<br /> 自身の<a target="_blank" rel="nofollow noopener" href="https://note.com/vaaaaanquish/n/ncc512cf0e263">timesチャンネル</a>があるため、独り言を言いやすい環境でもありますが、ネット弁慶時代の性格をうまく活用し、ネット上では話しやすい雰囲気を務めています。<br /> お蔭で、プロジェクトチーム外の人からも話しかけられることが多く、自身からも質問しやすく、社内の雰囲気は良好です(個人の感想です)。</p> <p>仕事は人対人のコミュニケーションで成立しているため、コミュニケーションを避けては通れません。<br /> しかし、話せれば良いわけではなく、しっかり会話が成立し、人間関係を良好にすることが肝心です。<br /> 人間関係が良くなれば信頼してもらえますし、そうなれば新人であっても、けっこう話を聞いてもらえます。<br /> これを活用し、自身からの提案が通ったりすると、仕事も楽しくなりますよ。</p> <blockquote> <p>コミュニケーションが苦手?――なら「なたもだ」で解決すればいいじゃない<br /> <a target="_blank" rel="nofollow noopener" href="https://www.atmarkit.co.jp/ait/spv/1912/11/news005.html">https://www.atmarkit.co.jp/ait/spv/1912/11/news005.html</a></p> </blockquote> <h2 id="自動化への意識"><a href="#%E8%87%AA%E5%8B%95%E5%8C%96%E3%81%B8%E3%81%AE%E6%84%8F%E8%AD%98">自動化への意識</a></h2> <p>現在の所属プロジェクトには、CI/CD環境が一部整っていますが、すべてが自動化されているわけではなく、非常にまどろっこしく感じる時があります。<br /> しかし、中には機械的に淡々と同じ作業をしている人もいるため、メンバー全員が自動化を考えているわけではないのだな、と意外に思いました。</p> <p>とあるシステムに、バイナリファイルを手動で設定しなければならないディレクトリがありました。<br /> そのバイナリファイルを更新するためには、手動でコンパイルしたバイナリファイルを、手動で上書きし、手動でプルリクをしなければなりませんでした。<br /> 私は嫌だったので、自動化したいと提案し、そして実装しました。</p> <p>人手による作業はヒヤリハットの温床になるため、できるだけ潰しておきたいです。<br /> その考え方が、私の自動化への意識を生み出してくれました。</p> <h2 id="開発環境におけるこだわりと柔軟性"><a href="#%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E3%81%93%E3%81%A0%E3%82%8F%E3%82%8A%E3%81%A8%E6%9F%94%E8%BB%9F%E6%80%A7">開発環境におけるこだわりと柔軟性</a></h2> <p>現在の所属プロジェクトの開発環境ですが、IDEとしてほぼ全員がVS Codeを使用しています。<br /> しかし、僕だけなぜかVimをメインで使用しています。<br /> 開発環境に対して強制が無かったというのもありますが、PythonならVimでいいかなという気持ちで独自路線を進んだのが、正直な理由です。</p> <p>ですがその際に、チームの開発環境に合わせる必要があります。<br /> VS Codeで利用しているプラグインやLintツールがあれば、それをVimに組込まなければなりません。<br /> 私はVimの設定を多少いじれたので、VS CodeじゃなくてもPythonを編集できることを証明しつづけています。</p> <p>一方で、妥協したものもあります。<br /> 既存システムにRustを使っていたものがあったのですが、代替品としてPythonを使っていたシステムがあり、そちらに移行すべきか否か、という話が持ち上がりました。</p> <p>個人的には、Rustを勉強していたこともあり、Rustを推したい欲がありました。<br /> しかし、他のメンバーはPythonの方が読みやすいです(当時は私しかRustを読めていませんでした)。<br /> 属人化が怖かったため、私からPythonのシステムに変えてほしいと頼みました。<br /> 結果として、多くのメリットが生まれました。<br /> 今でも若干後悔していますが、これで良かったとも思っています。</p> <p>こだわりは大事、妥協も大事です。<br /> 折合いを付けることが重要なことですね。</p> <h2 id="ソフトウェア工学"><a href="#%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E5%B7%A5%E5%AD%A6">ソフトウェア工学</a></h2> <p>オブジェクト指向という概念を理解できていない人は、意外と今でもいます。<br /> TDD文化がないプロジェクトはたくさんありますし、UMLを正しく読み書きできない人もたくさんいます。<br /> テスト手法とかカバレッジ測定とか、名前は知ってても開発で使える道具にできる人は、あまり多くいません。</p> <p>ソフトウェア工学は、システム開発全般で使える、かなり汎用的な知識を学べる学問だと思います。<br /> 学生時代にCI/CD環境を整えたのは、想像以上に役に立っています。</p> <h2 id="様々なプログラミング言語/ツールの概念や利用方法"><a href="#%E6%A7%98%E3%80%85%E3%81%AA%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E%EF%BC%8F%E3%83%84%E3%83%BC%E3%83%AB%E3%81%AE%E6%A6%82%E5%BF%B5%E3%82%84%E5%88%A9%E7%94%A8%E6%96%B9%E6%B3%95">様々なプログラミング言語/ツールの概念や利用方法</a></h2> <p>事前に学習して良かったと思ったプログラミング言語/ツールは、以下の通りです。<br /> これらを学生時代に学んでいたことで、会社のチーム配属直後からスムーズに開発を担当できました。</p> <ul> <li>Perl</li> <li>Git/GitHub</li> <li>CI/CD</li> <li>Slack</li> <li>C++</li> <li>Raspbian/Raspberry Pi</li> </ul> <p>私はPerlを勉強していましたが、それによりRubyやPythonなんて比較的簡単に使えるだろうと自己判断していましたし、実際にチームで開発やレビューを行う立場となっています。<br /> Gitを使っていたことで、GitHubでのプルリクという文化や、コンフリクトとの格闘について、長く苦しめられることもありませんでした。<br /> なにより、CI/CD環境の構築を経験していたおかげで、どのようにシステムをアップデートするのかの概要理解は非常に役立ちました。<br /> ラズパイに至っては、知らなければ使い方すらわからない気がしますが、スムーズにRaspbianをmicroSDカードに焼いて <code>ssh [email protected]</code> できました(簡単なことですが、意外と凄いことだと思いますよ)。</p> <p>これらに関しては、運の要素が結構絡みます。<br /> もし配属先のプロジェクトが、SVNでバージョン管理しているCOBOLシステムサーバーの保守運用(コミュニケーションツールはEメール)みたいな場合、全く役に立たなかった可能性もあります。<br /> 気負わずに、勉強したいことをすればいいと思います。</p> <h1 id="もっと学んでおけば良かったこと"><a href="#%E3%82%82%E3%81%A3%E3%81%A8%E5%AD%A6%E3%82%93%E3%81%A7%E3%81%8A%E3%81%91%E3%81%B0%E8%89%AF%E3%81%8B%E3%81%A3%E3%81%9F%E3%81%93%E3%81%A8">もっと学んでおけば良かったこと</a></h1> <p>以降、大学でもっと学んでおけば良かったことを記述します。<br /> 反面教師として、ご活用ください。</p> <h2 id="Javascript"><a href="#Javascript">Javascript</a></h2> <p>現在のJavascriptについては、殆ど理解できていません。<br /> 流行っているものは勉強したくない、という私の天邪鬼な性格が災いしました。<br /> それは、以下に示す、私の学生時代に使っていた言語からも、お察しできると思います(1つだけ例外あり)。</p> <ul> <li>Perl</li> <li>Java</li> <li>C++</li> <li>Rust</li> </ul> <p>流行というものは、使われているから発生するものです。<br /> 現に、私の所属しているチームでもJavascriptを扱っていますし、もしかしたら私も今後触ることがあるかもしれません。<br /> しかし、基本的な文法ならともかく、JavascriptはPerlやC++と同じくらい闇が深いと考えているため、モチベーションも相まってなかなか触りたいと思えません。</p> <p>すごく勿体ないことですし、自身の性格を直すためにも触ってみようかなと思ったり、逡巡したりを繰返す日々を過ごしています。</p> <h2 id="Webサイト開発"><a href="#Web%E3%82%B5%E3%82%A4%E3%83%88%E9%96%8B%E7%99%BA">Webサイト開発</a></h2> <p>Javascriptの節とも関係していますが、基本的な <code>HTML + CSS + Javascript + Webサーバー</code> という構成Webサイトについては、1度しっかりと勉強したほうが良かったかもしれません。</p> <p>学生時代にふるーいCGIサーバーを触っていたせいで、HTMLはWebサーバーで丸ごと動的生成するものだと思っていました。<br /> HTMLとCSSで体裁を整えて、中の要素だけをWebサーバーで動的生成するほうが、シンプルで疎結合だと気付いたのは、業務で取扱うようになってからです。<br /> HTMLとCSSとJavascriptとWebサーバーの役割を、もっとちゃんと学習すべきだったなぁと反省しています。</p> <h2 id="Docker"><a href="#Docker">Docker</a></h2> <p>とある業務でDockerを触る機会がありました。<br /> そこで、次のようなDockerfileを作ってしまい、動かないなーというミスを2日ほど経験しました。</p> <p>1番目のsetup.shはどうして動かないの?</p> <pre><code class="dockerfile"># 前略 CMD ["bash", "./setup.sh"] CMD ["bash," "./run,sh"] </code></pre> <p>初歩的過ぎるミスなのか、調べてもどこにも「CMDコマンドでは2つのコマンドを実行できない」という文言を見つけきれませんでした(公式サイトにも<a target="_blank" rel="nofollow noopener" href="http://docs.docker.jp/engine/reference/builder.html#cmd">ちょこっと書いてあるだけ</a>でした)。<br /> 今ではDocker無しの生活は考えられませんが、学生時代にちょっとでも触っておけばよかったです。</p> <h2 id="サーバー運用"><a href="#%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E9%81%8B%E7%94%A8">サーバー運用</a></h2> <p>とにかくネットワーク系は苦手でした。<br /> 大学でもネットワークの授業はありましたが、基本的なコマンドさえ頭から消えていました(<code>arp</code>、<code>netstat</code>、<code>iptables</code> などなど)。<br /> しかし、ネットワーク系を触るとなると、インフラを整備するような環境でもない限り、あまり機会が無いと思います。</p> <p>また、基本的なサーバー運用時のイロハも学んでおけばよかったです。<br /> プロセスの整理、インタフェースの把握、デーモンの理解、ネットワーク設定などなど、サーバー運用で学習できる内容は数知れません。</p> <p>学生時代にこれらを学ぶ機会はあまり無いかもしれませんが、せっかく研究室にサーバーがあったのに、使いこなせなかったのは勿体なかったです。</p> <h2 id="ライセンス関係"><a href="#%E3%83%A9%E3%82%A4%E3%82%BB%E3%83%B3%E3%82%B9%E9%96%A2%E4%BF%82">ライセンス関係</a></h2> <p>学生時代、ツールは実質タダ、OSS使い放題の環境でした。<br /> しかし、社会人になるとそう簡単ではありません。</p> <p>学生であればフリーソフトでも、商用になった途端に有料というツールは珍しくなくなってきました。<br /> もし商用利用不可/商用利用有料のツールでしか開発できない人間になってしまうと、非常に苦労すると思います。<br /> 私も、GitKrakenが使えなかったり、CLionが使えなかったりと、ライセンスの壁を認識して過ごしています。</p> <p>またOSSについても、ライセンスが問題になる場合があります。<br /> いわゆる<a target="_blank" rel="nofollow noopener" href="https://www.wdic.org/w/TECH/GPL汚染">GPL汚染</a>と呼ばれるものですが、実際にお金を取得するプロジェクトでは、かなり気をつけなければなりません。<br /> この辺りは、ソフトウェア工学としてフォローできそうな気がします。<br /> ぜひ、どなたか研究してみてはいかがでしょうか?</p> <h2 id="読書"><a href="#%E8%AA%AD%E6%9B%B8">読書</a></h2> <p>本を読む時間が減ります。<br /> 読む気力が残っていない日々ばかりです。</p> <p>大学というのは、タダで高額な書籍の読み放題機関であると心得るべきでした。<br /> 時間もたっぷりあったはずなので、悔やんでも悔やみきれません。</p> <h2 id="料理"><a href="#%E6%96%99%E7%90%86">料理</a></h2> <p>正直、こんなにコンビニ弁当の日々が続くとは思っていませんでした。<br /> 朝はパン、昼は外食、夜はコンビニ弁当のルーティンができてしまい、気付けば5キロ太っていました。<br /> 食費も結構かかります。</p> <p>しかし、想像以上に料理ができません。<br /> 都会の部屋の狭さもあり、効率的な動きを余儀なくされます。<br /> 基本がなっていない人間に効率的な動きを求められても、なかなかうまく行きません。</p> <p>それでも最近は少しずつ自炊をしています。<br /> カレーを作ると2時間、麻婆豆腐を作ると1時間かかりますが......</p> <h1 id="振返って一言"><a href="#%E6%8C%AF%E8%BF%94%E3%81%A3%E3%81%A6%E4%B8%80%E8%A8%80">振返って一言</a></h1> <p>いろいろありましたが、学生時代は楽しかったです。<br /> もちろん、今の生活も楽しいです。</p> <p>なんだかんだ言って、その場その時を生きていける力が最も大切なことかもしれませんね。</p> Morichan tag:crieit.net,2005:PublicArticle/16098 2020-10-04T23:17:50+09:00 2021-11-29T13:41:56+09:00 https://crieit.net/posts/UML-Python-Perl-PHP-UML-1 実践UML記述法:スクリプト言語(Python, Perl, PHPなどなど)における可視性をUMLで記述する1考察 <p>本記事は、 Qrunch からの移転記事です。</p> <p>移転元: <a target="_blank" rel="nofollow noopener" href="https://morichan.qrunch.io/entries/Ry4qc9vnjI1JFXnB">実践UML記述法:スクリプト言語(Python, Perl, PHPなどなど)における可視性をUMLで記述する1考察 - 雑木林</a></p> <h1 id="TL; DR"><a href="#TL%3B+DR">TL; DR</a></h1> <p>スクリプト言語における可視性をUMLで記述する場合、リバースエンジニアリングによる結果論的可視性を書くといいかもしれない</p> <h1 id="本題:スクリプト言語における可視性をUMLで記述する"><a href="#%E6%9C%AC%E9%A1%8C%EF%BC%9A%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E8%A8%80%E8%AA%9E%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E5%8F%AF%E8%A6%96%E6%80%A7%E3%82%92UML%E3%81%A7%E8%A8%98%E8%BF%B0%E3%81%99%E3%82%8B">本題:スクリプト言語における可視性をUMLで記述する</a></h1> <p>UMLには可視性という概念があります。</p> <p>Javaにおけるアクセス修飾子とほぼ同等のもの、と考えておけば間違いではありません。<br /> <code>public</code>、<code>private</code>、<code>protected</code>、および<code>package</code>です。</p> <p>スクリプト言語(ここではPython、Perl、PHPといったいわゆるP言語を対象としておきます)には、絶対的な可視性はありません。<br /> 例えばPythonであれば、変数の前にアンダースコアを付けることで「疑似的に」プライベート変数を設定できますが、実際に外部から参照できないわけではありません。</p> <h2 id="問題点"><a href="#%E5%95%8F%E9%A1%8C%E7%82%B9">問題点</a></h2> <p>スクリプト言語で開発する場合、UMLにおける可視性の情報は無意味です。<br /> それどころか、余計な情報として「ノイズ」と言われても仕方ありません。</p> <p>UMLには可視性を書かなくても構文的に問題ないため、可視性の情報無しでも大丈夫です。<br /> しかし、それでは次のような問題が起こりえます。</p> <p><img src="http://www.plantuml.com/plantuml/png/SoWkIImgAStDuKhEIImkLWWjJYrIgEPI08A2eioyaf3KYX8DJQvQBgYyPrvQVb5kOabcVXvKMGbG1PYHcrfSd9YU2b8BDaLNrqv1oJ0cBnEeHGbP8vT3QbuAq4e0" alt="UserクラスがInformationクラスと関連しているクラス図" /></p> <p>UserクラスがInformationクラスと関連しているクラス図</p> <pre><code class="plantuml">@startuml class User { printText() } class Information { text message } User --> "1\ninfo" Information @enduml </code></pre> <p>さて、上記のクラス図から「UserクラスはInformationクラスのtext変数を参照しているが、message変数は参照していない」という情報を読み取れるでしょうか。</p> <p>UserクラスがInformationクラスを持っているPythonコード</p> <pre><code class="py">class User: info = Information() # クラス図におけるprintText()メソッドと対応 def print_text(self): print ("{}".format(info.text)) class Information: text = "This is printed" message = "Oh no!" </code></pre> <p>お分かりの通り、クラス図からでは理解できません。<br /> しかし、クラス図から変数の利用状況が理解できなければ、結局コードを読まなければならず、UMLの浸透には貢献できません。</p> <p>余談ですが、クラス図では<code>printText</code>とキャメルケースにしているところ、Pythonコードでは<code>print_text</code>とスネークケースにしています。<br /> これは、UMLがキャメルケース、Pythonがスネークケースを推奨しているためです。</p> <h1 id="解決策"><a href="#%E8%A7%A3%E6%B1%BA%E7%AD%96">解決策</a></h1> <p>発想を逆転します。<br /> 設計時に可視性を決めるのではなく、コード上で利用しているか否かを判断し、それをUMLに反映してはどうでしょうか?</p> <p><img src="http://www.plantuml.com/plantuml/png/JSun2i9G383XFQS8dHHve1UGEdPMDvTOemJxqfAa88ftzragc3NV7r9xaCMOE_2xw4166TkEt7SH9kSnk6bxtSkJSGqmRV3eRFW2B9DmCD4uy2CMItZ_HAFNtZA5z3h35KOnSvFPdMxyzTEjbBPORKwQK4fO_UTGirxAUny0" alt="UserクラスがInformationクラスと関連しておりmessage変数は利用していないクラス図" /></p> <p>UserクラスがInformationクラスと関連しておりmessage変数は利用していないクラス図</p> <pre><code class="plantuml">@startuml class User { - printText() } class Information { + text - message } User --> "1\n- info" Information @enduml </code></pre> <p>上記のクラス図から、「少なくとも」Informationクラスのmessage変数を外部クラスは参照していないことがわかります。<br /> また、他の変数(info)やメソッド(<code>printText()</code>)についても、外部からの参照はないことがわかります。</p> <p>上記のクラス図を見ただけで、Informationクラスはtext変数にのみ注意すればよく、message変数はInformationクラス内部を見れば把握できることがわかります。</p> <h1 id="結論"><a href="#%E7%B5%90%E8%AB%96">結論</a></h1> <p>どうでしょう。<br /> あくまで視点を変えただけですから、「言われなくてもその通りじゃん」と言われればごもっともです。<br /> UMLを設計ツールとして可視性を考えるのではなく、UMLをあくまで可視化ツールとして利用するという考え方であれば、UMLを利用しやすくなるのではないでしょうか。</p> Morichan tag:crieit.net,2005:PublicArticle/16097 2020-10-04T23:17:10+09:00 2020-10-04T23:17:10+09:00 https://crieit.net/posts/vimrc-GitHub vimrcファイル(環境設定ファイル全般)はGitHubで管理するといいのではないか <p>本記事は、 Qrunch からの移転記事です。</p> <p>移転元: <a target="_blank" rel="nofollow noopener" href="https://morichan.qrunch.io/entries/uhFFiglG0UDfJIy0">vimrcファイル(環境設定ファイル全般)はGitHubで管理するといいのではないか - 雑木林</a></p> <h1 id="はじめに"><a href="#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB">はじめに</a></h1> <p>皆さんは、出先にvimrcファイルがあれば良かったのに、という経験はありませんか?</p> <p>偶然にも、私はそんなことが何度かありました。</p> <h1 id="例1:インターンシップ"><a href="#%E4%BE%8B1%EF%BC%9A%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%83%E3%83%97">例1:インターンシップ</a></h1> <p>それは、とあるインターンシップでのことです。</p> <hr /> <p>回想はじめ</p> <p>偉い人「AWSサーバ1つあげるから、これで何か作ってください」<br /> 私「よっしゃいじり倒したろ、さてapacheの設定ファイルは......」<br /> 私「Vimの設定がデフォルトで全然使えん!!!」</p> <p>回想おわり</p> <hr /> <p>さて、私はこの時、偶然にもGitHubにvimrcファイルを置いていたため、クローンしました。<br /> するとどうでしょう、行番号も碌に表示していなかったVimに、命が吹き込まれたのです。</p> <p>私は、このインターンシップを大成功で収めることができました。</p> <h1 id="例2:新しい業務用パソコン"><a href="#%E4%BE%8B2%EF%BC%9A%E6%96%B0%E3%81%97%E3%81%84%E6%A5%AD%E5%8B%99%E7%94%A8%E3%83%91%E3%82%BD%E3%82%B3%E3%83%B3">例2:新しい業務用パソコン</a></h1> <p>それは、新しい業務用パソコンがたくさん届いた時のことです。</p> <hr /> <p>回想はじめ</p> <p>私「さて、環境構築するか」<br /> 新パソコンA「Vim無いよ」<br /> 新パソコンB「Vim無いよ」<br /> 新パソコンC「Vim無いよ」<br /> 私「......これ全部同じことしないとならんの?」</p> <p>回想おわり</p> <hr /> <p>さて、私はこの時、偶然にも(以下略)</p> <p>私は、たくさんの新しい業務用パソコンにいち早くVim環境を整えることができました。</p> <h1 id="例3:vimrc編集後"><a href="#%E4%BE%8B3%EF%BC%9Avimrc%E7%B7%A8%E9%9B%86%E5%BE%8C">例3:vimrc編集後</a></h1> <p>それは、突発的にvimrcファイルを書換えた時のことです。</p> <hr /> <p>回想はじめ</p> <p>私「ふへへ、ついに最強のvimrcを書いてやったぜ」<br /> 私「さて、これを私が利用している別のパソコンにも入れなきゃ」<br /> 私「えーっと、家のデスクトップ、家のノート、新パソコンA、新パソコンB、新パソコンC......」<br /> 私「......今日はそろそろ帰ろう」</p> <p>回想おわり</p> <hr /> <p>さて、私はこの時、偶然にもGitHubでvimrcファイルを管理していたため、新しいvimrcをpushしました。<br /> 別のパソコンを使う際にpullすればいいだけですから、その日は何も考えずに帰りました。</p> <p>数日後、別のパソコンを利用時にvimrcをpullするとどうでしょう、Vimが生まれ変わったのです。</p> <p>私は、常に最新のvimrcをどこでも利用できるのです。</p> <h1 id="おわりに"><a href="#%E3%81%8A%E3%82%8F%E3%82%8A%E3%81%AB">おわりに</a></h1> <p>vimrcは便利ですが、慣れてしまうとデフォルトのVimが苦痛になってしまいます。<br /> いち早く自分の環境に(PCを)適応させるため、GitHubで環境ファイルを管理するのは1つの手だと思います。</p> <p>上記を活用して、快適環境の生活を過ごしませんか。</p> <h1 id="追記"><a href="#%E8%BF%BD%E8%A8%98">追記</a></h1> <p>GitHubで管理する前は、USBにvimrcを入れて生活していました。<br /> 書換えた時に面倒なことになるのは、お察しの通りです。</p> Morichan