読者です 読者をやめる 読者になる 読者になる

tsukarooohi's diary

CakePHP,CentOS,AWSなど勉強中の技術的記録として利用中。

「なぜ、あなたの仕事は終わらないのか」レビューメモ


なぜ、あなたの仕事は終わらないのか スピードは最強の武器である

天から与えられている時間は皆平等である 能力には個人差がありいきなり向上するようなことはない ならば時間の使い方を徹底的に突き詰めるしかない。 すなわち、時間を制する者が世界を制している。 「ロケットスタート時間術」と名付けました

著者 中島聡(ナカジマ サトシ)さんのご紹介

世界を一変させたWindows95の設計思想を生み出した伝説の日本人。

「ドラッグ&ドロップ」や「ダブルクリック」などの概念を生み出した元マイクロソフトの伝説のプログラマー

多忙を極め、納期遅れが蔓延するプログラマーの世界で、 中島氏は「一度も納期に遅れたことがない男」として活躍。

文章構成

1章 「なぜあなたの仕事が終わらないのか?」を解き明かし、あなたのこれまでについて振り返っていただきます。敵を知り己を知れば百戦危うからず、だからです。

2章 「ロケットスタート時間術」を手に入れると、あなたにどんないい事があるかを説明することで、時間を効率的に使うことの楽しさを実感していただきます。

3章 「ロケットスタート時間術」がいかにして生み出されてきたかをお伝えします。小・中学校時代、高校・大学時代、社会人になってから起業するまで、どう時間に向き合ってきたかの話が出てきます。

4章 メインとなるノウハウのすべてを公開していきます。

5章 ロケットスタート時間術を自分のものにする

6章 時間を制する者は、人生を制す

ドイツの文豪ゲーテは「知ることだけでは十分ではない、それを使わないといけない。やる気だけでは十分ではない、実行しないといけない」と言いました。 その為本書全体を通してロケットスタート時間術を実践していただけるよう働きかけていく。

一度立ち止まって、時間の使い方に徹底的に向き合う。

本書の効果
  • 仕事が多すぎて絶望している人も、スムーズに回せるようになる
  • 予定の半分で仕事の大半が終わるようになる
  • 日中眠くならない方法がわかる
  • 打ち合わせに遅刻しなくなる
  • 毎日勉強する時間やブログを書く時間を確保できるようになる
  • 自分の2倍能力が高い人にも勝てるようになる
  • マルチタスクのこなし方がわかる
  • 徹夜をしなくても済むようになる
  • 集中力が手に入る
  • メールを返信すべき本当の時間がわかる
  • 仕事に追われることがなくなり、逆に仕事を追う状態に入れる
  • ビル・ゲイツマイクロソフトがやっている仕事の仕方がわかる
  • 「勉強」せずに英語を話せるようになる、洋書が読めるようになる
  • 朝型の生活習慣が手に入れられる
  • 困ったことが起きなくなる
  • 会社から早く帰れるようになる
  • 特別な受験勉強が必要なくなる程効率のいい勉強の仕方がわかる
目次

ここからは目次に合わせて自分で気になった点などをリスト形式でメモしてます。

  1. なぜ、あなたの仕事は終わらないのか
    • 「終わらない仕事」は、こうなっている
      • ラストスパート志向が9割
    • なぜあの天才は、トップグループから脱落したのか
      • 時間の使い方が下手な為、能力が成果に見合わない
    • 応用問題が終わらないと、テストは終わらない
      • 仕事が終わらない人は、得てして後半の応用問題を甘く見ています
      • 見積もりの甘さ
    • 最初に頑張るアメリカ人、最後に頑張る日本人
      • 日本は家族より仕事を優先しないとやる気がない的な評価をされがち
      • アメリカは逆で家族を大切にする文化が根強い為、早くから働き早く帰る
        • 夕飯を家族みんなで食べるという文化が非常に根強い
          • その為会社の人は皆夕飯前には職場にはいません。
        • アメリカでは日本ほど公共交通機関が発達していない
          • 子供がスポーツをしていたりすると、夜7時過ぎにはスクールバスも通っていないので親が車で迎えに行かないといけない
          • アメリカのスクールバスは定時に帰宅する子ども達の為だけに運営されています。
      • ここから見える事
        • 必然的に仕事の終わりが先に決まる
          • 仕事を終わらせる為には自動的に朝7時から働くことになる
      • 日本は会社を重視しすぎるあまり、仕事の生産効率が落ちている
    • 「なるはや」をやめれば緊張感が生まれる
      • なるはやの方が緊張感が生まれるイメージ

        • なるはや -> なるべく早く -> 急ぎ = 緊張感なイメージ
        • なるはやじゃない(納期が決まってる) -> 予定が組める -> 猶予がある = ちょい余裕?
          • 予定が組めるが肝!
          • ここが徹底できてる(時間術)人 = 納期が決まっているからの緊張感
      • ここでの「なるはや」とは

        • 納期が曖昧 -> 緊張感が欠ける -> クオリティーが下がる -> 元々お互い曖昧な納期で進めている為、結果納期に間に合わない事さえ起こる
        • 締め切りが決まっているからこそ
          • 全力でやる -> 緊張感も生まれる -> 効率化しようとする -> 結果生産性が上がる
      • 「なるはや」は日本人の潜在的な能力を引き出さずに抑圧(よくあつ)する、悪い病気
      • アメリカでは、形式よりも本質的な意味を考えて判断することが多い
        • 車のスピード違反で捕まった時に「息子が熱を出していて」という言い訳が通用することが結構あります。
        • 法律は法律ですから守るのは基本ですが、なぜ法律ができたのかという所まで遡ったら、そういう判断を下すことになる。(警官も意味を考えている)
        • アメリカの電車には優先席がありません。なぜなら、必要と思ったら規則がなくても高齢者や妊婦などに席を譲るからです。
    • 「余裕を持っておけばよかった」の経済学
    • 結局、なぜあなたの仕事は終わらないのか
    • それでも、あなたの仕事は終わる
    • 1章の仕事が終わらない人の特徴
      • 安請け合いしてしまう
      • ギリギリまでやらない
      • 計画の見積もりをしない
  2. 時間を制する者は、世界を制す
    • その仕事は、本当に間に合うのか?
    • スマホアプリがアップデートを繰り返す理由
      • どんなに頑張って100%のものを作っても、振り返ればそれは90%や80%のものに見えてしまう
    • 3500個のバグがあっても、世界は変わる
      • 「兵は拙速(せっそく)を尊(たっと)ぶ」兵法書の「孫子」から派生した言葉
      • 一般には「拙(つたな)い戦法でも素早く進軍した方が戦いに勝つ」
      • 転じて「仕事は最初のうちに敏速に終わらせると良い」
    • 全ての仕事は、必ずやり直しになる
      • スマホのアプリもWindows95もプレゼン資料もそう。どうせやり直しになるのだから細かいことは置いておき、まず全体像を描いてしまった方がいいのです。
      • これがつまりプロトタイプを作るということになります。
    • 石膏像を彫るとき、「眉毛」から始める人はいない
      • 仕事が遅くて終わらない人が陥る心理として「評価されるのが怖い」というものがあります。自分の仕事がどう評価されるのかが怖くて、できるだけ自分の中の100点に近づけようとしてブラッシュアップを繰り返す。
    • 待ち合わせ30分前に、スタバでコーヒーを飲め
      • 締め切り当日がゴールだと思っている人が多い
      • 締め切りの前に締め切りがあると考えなければならない
    • 花さえ用意できれば、裏で昼寝してもいい
      • 丸ごと読んでもいいくらいの内容
    • ルーがなくてもカレーは作れる
      • 「困難は分割せよ」フランスの哲学者・デカルトの言葉
    • 「出勤前の服選び」で疲れてどうする
      • 「世界の偉人はいつも同じ服を着ている」
      • 心理学では、決断や意思決定をする際に減少する気力のようなものを「認知資源」と呼ぶ
      • 普段から大きな決断を迫られている。
      • 会社の経営や政治に関わる重大な決断をする時に脳が疲れないように。
      • ビルゲイツは面白いw
      • 彼が参加するプレゼン会議では発表者が発表する時間は設けれらてない。
      • 資料は前もって送り、当日は質疑応答のみの会議
    • ビル・ゲイツの意思決定は光速
    • 現在の「右クリック」の概念は、こうして生まれた
    • 時間を制する者は、世界を制す
      • メリット
        • リスクを測定できる
        • 目に見える形のものを素早く作ることができる
        • 誤差に対応出来る
  3. ロケットスタート時間術」はこうして生み出された
    • 何としても宿題を終わらせて海に行きたかった
    • 予習は、最強の時短になる
      • 予習は自分がわからない箇所を明確にする為の準備。その分からなかった箇所を授業で解決すればいい
      • 授業を最大限に活用することで、復習や試験前の勉強の時間などを削ることができます
    • 本当は受験勉強さえ効率化できる
    • タイムマシンを作るのに漢字はいらない
    • 余った時間で、好きなことに打ち込む
    • 嫌なことをやりたくなければ効率化するしかない
    • 言葉で説明できなければ、先に形にしてしまえ
      • 企画を形にする前に「そもそもどういうものなのか想像できない」「予算はあるのか」「商品になる保証はあるのか」そう言ったことを言割れて仕事を中断するのは勿体無い
    • 「まず作ってみる」が、未来を変える
    • 企画を早く形にしたものがチャンスをつかめる
      • ベーパーウェアという戦略
        • まだ完成してもいないものを発表して、競合他社のやる気を削ぐという戦略
    • インターネットという概念に熱狂する
    • 誰もが、この時間術を使えるようにするために
  4. 今すぐ実践 ロケットスタート時間術
    • 100人に1人もできない「あること」とは?
      • 「常に締め切りを守る事」 -> 「常に締め切りを守れるような仕事の仕方をする事」
    • 「ラストスパート志向」が諸悪の根源
      • 締め切りという言葉への典型的な誤った考え方
        • 見積もりはあくまで見積もりでしかなく、予定通りに仕事が進むとは限らない
        • 締め切り目前に、徹夜でも何でもして頑張る事が大切
        • それでもどうしても締め切りに間に合わなかった場合は、その段階でスケジュールを変更してもらうしかない
      • 「締め切り = 努力目標」という考えがあり、「目標に向けて精一杯努力する事が大切」という体育会系な姿勢
      • 多くの人が「最初はのんびりしていても、最後に頑張れば何とかなる」という根本的な誤ちを改めるところから始めないといけません。
      • ラストスパート志向の一番の欠点
        • 最後の最後までそのタスクの本当の難易度が分からないと言う点
    • まずは「締め切りは絶対に守るもの」と考える
      1. 「まずはどのくらいかかるかやってみるので、スケジュールの割り出しの為に2日下さい」と答えて仕事に取り掛かる(見積もりの為の調査期間)
      2. その2日をロケットスタート期間として使い、2日で「ほぼ完成」まで持っていく
      3. 万が一、その2日で「ほぼ完成」まで持って行けなかった場合、これを「危機的な状況」と認識してスケジュールの見直しを交渉する
    • スタートダッシュで一気に作る
      • 「締め切りに迫られていないと頑張れない」のは多くの人々に共通する弱さだが、仕事が終わらなくなる原因の9割は、締め切り間際の「ラストスパート」が原因
      • 考えてから手を動かすのではなく、手を動かしながら考えてください。崖から飛び降りながら飛行機を組み立てるのです(キリっ
      • 残りの8割で大切なのは「全力で仕事と向き合う」ではなく「仕事の完成度を高める」である事。
      • 8割の時間を使って2割の仕事をこなす訳なので「仕事が終わらない訳がない」という余裕(スラック)が生まれます
    • 見積もるには、とにかくやってみることだ
      • 時間に余裕がある時にこそ全力疾走で仕事し、締め切りが近づいたら流す
      • 最初の2日で仕事の8割を終わらせる
      • ロケットスタートを実践する時のコツ
        • 前倒しで取り掛かることです。仕事が決まったらすぐにやってください
      • 仕事の提出を前倒すのではありません。取り掛かりの時期こそ前倒すのです。
    • 徹夜は仕事がノッているときにしろ
      • 考えてから手を動かすのではなく、手を動かしながら考えてください
      • 始めの2割の期間はメール、FB、コーヒー、散歩、同僚、上司との食事、MTGさえもしない
      • 始めの2割の期間は「完全に現実から去った仙人のようになっています」
    • 仕事は最速で終わらせてはいけない
      • 仕事を早く終わらせる事よりも、仕事を安定して続ける事を意識すべきです。結果、焦って仕事をしていた時よりも早く、しかも高い完成度で終わるようになる
    • 集中力の秘密は「界王拳
      • ものすごく仕事に集中するということ
      • 「この時に何倍界王拳を使うか」という具体的な数字まで決める事が大事
    • 界王拳を使ってメールを返す必要があるか?
      • 集中力を上げるために必要な事
        • マルチタスクを放棄する事。
        • あなたの仕事はメールを素早く返信する事ではなく、仕事を終わらせる事である
        • 界王拳中にはメールにも電話にも出ないという事を今日決断してしまいましょう。界王拳を使っている間にやる事はメインの仕事のみです。それ以外の事は一切放棄して黙々と作業に取り組んでいきます。通常の20倍の能力を発揮して、メールチェックに挑む必要があるかどうか考えてみてください。
    • どこまでも2:8の法則で仕事をする
      • 納期が10日なら始めの2日
      • 1日に当てはめるなら最初の2時間半で、1日のメインの仕事の8割を終わらせるようにする
      • 息を止めて仕事をしてfいるようなイメージ
      • 残りの8割はメールなど何でも流しておk
    • 最強の昼寝は「18分」
      • 10分 -> 20分 -> 30分と試した結果
      • 眠気が残らず目覚めの良い時間が18分(個人差ある為各自探してね)
    • 午後は気楽に「流し」で働く
    • 朝が最強である3つの理由
      1. 外部要因の締め切りが設定できる
      2. メールをチェックする必要がない
      3. 話しかけてくる人が少ない
    • 結局、ロケットスタート時間術とは何なのか
      • 全ての仕事をスタートダッシュでこなして、絶対に終えられる納期を導き出す
      • 最初の2割の期間を「見積もり期間」としてもらい、実際には、仕事量の8割を終える
      • 最初の2割の期間で8割の仕事ができなかったら、期限を延ばしてもらう
      • 「仮眠を取る」と「マルチタスクをやめる」で、仕事の効率を上げる
      • ロケットスタート時間術の本質は余裕を持つ事であり、高速で次々と仕事を終わらせていく事ではない
  5. ロケットスタート時間術を自分のものにする
    • 長期の仕事は縦に切る
    • 「並行して進む仕事」は1日を横に切る
    • 大きな仕事と小さな仕事が並行している場合
    • それでもうまくいかなかったら
    • あなたの仕事は規則を守ることではない
    • 他の人の仕事が遅れたら「モックアップ」を作る
    • 結局、まず仕事が来たら
  6. 時間を制する者は、人生を制す
    • 目的があれば、勉強はたやすい
      • 目的のない勉強はするな
      • 勉強のための勉強に意味はない
    • 崖を飛び降りながら飛行機を組み立てろ
      • 何かの実践のために知識が必要な場合、知識はやりながら覚えていくべきだ
    • 勉強しなくても英語を話せるようになる方法
      • あなたのやるべき事は英語を勉強する事ではありません。英語を使って何かをする事です。
      • 必要な時に必要な分だけ用意して行く。それを繰り返してれば自然と覚える
    • 集中しなきゃいけない仕事なんかするな
      • 自分が本当にやりたいことを見つけろ
    • 何を基準に「自分に適した職」を選ぶべきか
      • 「頼まれなくても自分から喜んで残業するほど楽しい仕事かどうか」で選ぶべき
      • 集中力は、好きだからこそ自然出てくるもので、好きでもないものに対して無理やり絞り出すものではない
    • 運だけではない「姿勢」の重要性
      • 現状に満足せず、常に新しいものを求めよう
      • 誰もやった事のない仕事をしよう
      • 自分が関わったら、そのPJを何としても面白い方向に持って行こうとします
    • やりたいことには思い切って飛び込む
      • やりたい仕事があったら、上司に頼む前にまずやってみる
    • 冴えたアイデアを生む思考とは
      • 今ある製品・サービス・考え方を「何か使い勝手の悪い部分、気に食わない部分はないか?」という視点で眺めてみる
      • 「何か新しい商品・サービス・考え方が出てきたら、それと何かを組み合わせて面白いものができないかな?」という視点で世の中を眺める
      • あなたは現在の世界・生活に満足していますか?満足していないからこそ、何かやりたいことがあるはずです
    • 今の環境で夢に近づく方法
      • 今やっている仕事の中で、本当にやりたい仕事に繋がる共通点を見つけ出せ
      • 「無理だ」という人の多くが実は、その事について実際にはほとんど何も調べてもいないし、考えてもいない人だ
    • やりたいことが見つからないなら先人に聞く
      • あなたと少し異なる情報源に触れることのできる人・常にアンテナを広く張り巡らせている人に話を聞くといい
    • MBAで学べることより大切な、たった一つのこと
      • 自分が幸せになれる行動をしないと、人は幸せにはなれない
    • 時間を制する者は、人生を制す
      • 本書の目的通り「ロケットスタート時間術」を取り入れるを、行動に移してもらうよう持っていく内容
    • 結局、本書の真の目的とは何か
      • 勉強のための勉強はするな
      • 規則は守るな
      • 集中力を無理やり引き出さなければならない仕事はするな
    • あなたが寝る前にやるべきこと
      • 人生を変えるには覚悟が必要です。
      • あなたが今日から実践すべきこと、それは夜寝る前に、明日やることのタスクリストを作ることです。これをやらなければいけないのは「絶対」です。
      • タスクリストのコツ

        • 仕事は15分程度で終わる単位の仕事に分けることです。
        • あなたは明日の仕事の大半を、明日の午前中までい終わらせるのです
        • このリズムが、あなたに「仕事を追っている感覚」をもたらします。
      • 見積もり期間(全体期間の2割)の中に8割終わらせるのが可能な限りのリスクを排除します。

      • 仕事の向き合い方の全貌
最後に感想

普段は技術書ばかりでビジネス書はあまり読まない方なんですが、会社の方針などもあり今回「なぜ、あなたの仕事は終わらないのか」を読んでみましたが本当に読んでよかったと思います。

内容はもちろんですが、界王拳など興味を引く表現をしてくれたり、あまり見ない付箋的な表で説明してくれたりと本当に分かりやすく、また飽きる事なく最後まで読めました。

全部が全部自分の人生にいれられるわけではありませんが、かなりのパターンへの対応方法を例として書いてくださっているので、どこかしら実践できる内容が見つかると思います!

取り敢えず私は2:8の法則界王拳を意識して仕事に取り組むようにします。


なぜ、あなたの仕事は終わらないのか スピードは最強の武器である

初めてのREST API(Kintone)まとめとハマりどころ

Kintone REST API
  • 取得、追加、更新の際のリクエスト先が単数形か複数形

    • 1件の時は単数形
      • レコードなら/k/v1/record.json
    • 複数の時は複数形
      • レコードなら/k/v1/records.json
  • HTTPメソッド

    • 取得、追加、更新でHTTPメソッドが分けられている
      • 取得
        • GET
      • 追加
        • POST
      • 更新
        • PUT

    慣れてしまえばこっちの方が分かりやすいからこのような仕組み?仕様になっているのには納得。逆にこのような分け方があったんだって自分の開発でも活かせれそうな考え方

  • Kintoneアプリの各フィールドにフィールドコードを設定しないと上手く動作しない

  • 取得レコードのKintoneアプリ側のフィールドのタイプ別で配列の階層が違う
[records]
    [field_code1] => Array
        (
            [type] => NUMBER
            [value] => 0
        )
    [field_code2] => Array
        (
            [type] => CREATOR
            [value] => Array
            (
                [code] => test
                [name] => test
            )
        )

    [field_code3] => Array
        (
            [type] => SINGLE_LINE_TEXT
            [value] =>
        )

Kintone REST APIに関しては仕様に書いてくれてるのでちゃんと読んでさえいれば間違いないんだけど単数形・複数形は中々見落としがちかなと。 取得レコードの階層がタイプ別になるのはハマりどころではないけど、プログラム側でごにょごにょする時にちょっとめんどくさいなって感じですかね。

PHPでの処理
  • file_get_contents()を使用する場合'ignore_errors' => true,を指定しないと何かしらの理由でエラーが返ってくる時にwarningになりエラー内容が分からない。
$context = [
    "http" => [
        "method" => 'GET', 
        "header" => implode("\r\n", $header), 
        "content" => json_encode(["app" => $appId, "query" => '$id="60"']
    ],
    'ignore_errors' => true,
];

これはfile_get_contents()での取得サンプルや、フォーラム内のコードにも出てなかったんだけど他の人らは確実にエラーが返って来ないように組んでるのか? もしくはcurl()とかを使ってるのかな? 取り敢えずこれは曲者でした。

KUSANAGI for さくらに無料SSL証明書を導入してみた

Let's Encryptの無料SSL証明書を取得

# ディレクトリ移動
cd /usr/local/src

# Certbot クライアントのインストール
git clone https://github.com/certbot/certbot

# certbotの確認
ls -l
drwxr-xr-x 14 root root 4096  1月  7 17:10 certbot

# ディレクトリ移動
cd certbot

# 証明書取得
./certbot-auto certonly --webroot \
-w {ドキュメントルート} -d {SSL対象ドメイン} \
-m {メールアドレス} \
--agree-tos

# 下記のように出れば成功
IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/{SSL対象ドメイン}/fullchain.pem. Your cert
   will expire on 2017-04-07. To obtain a new or tweaked version of
   this certificate in the future, simply run certbot-auto again. To
   non-interactively renew *all* of your certificates, run
   "certbot-auto renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

# 証明書の確認
ls -l /etc/letsencrypt/archive/{SSL対象ドメイン}
-rw-r--r-- 1 root root 1801  1月  7 17:22 cert1.pem
-rw-r--r-- 1 root root 1647  1月  7 17:22 chain1.pem
-rw-r--r-- 1 root root 3448  1月  7 17:22 fullchain1.pem
-rw-r--r-- 1 root root 1708  1月  7 17:22 privkey1.pem

先ほど確認した証明書などは/etc/letsencrypt/archive/{SSL対象ドメイン}以下に保存され/etc/letsencrypt/live/{SSL対象ドメイン}以下にシンボリックリンクが作成されます。 Let's Encryptの証明書は有効期限が90日間となっているため都度更新しないといけません。 この後自動更新の設定をするのですが、Let's Encrypt自体が自動更新を推奨しているのでこのように簡単なコマンドだけで証明書を更新できるようにしているみたいです。 更新すると先ほどの/etc/letsencrypt/archive/{SSL対象ドメイン}以下が更新されるわけですが、シンボリックリンクが貼られているためWebサーバー自体の設定の変更は必要なくなるという訳です。

# シンボリックリンクの確認
ls -l /etc/letsencrypt/live/{SSL対象ドメイン}
lrwxrwxrwx 1 root root 41  1月  7 17:22 cert.pem -> ../../archive/{SSL対象ドメイン}/cert1.pem
lrwxrwxrwx 1 root root 42  1月  7 17:22 chain.pem -> ../../archive/{SSL対象ドメイン}/chain1.pem
lrwxrwxrwx 1 root root 46  1月  7 17:22 fullchain.pem -> ../../archive/{SSL対象ドメイン}/fullchain1.pem
lrwxrwxrwx 1 root root 44  1月  7 17:22 privkey.pem -> ../../archive/{SSL対象ドメイン}/privkey1.pem

SSL通信用ポート開放

SSL通信用のポートは443になります。 下記サイトで自分のサーバーが443のポートを開放できているか確認してください

https://www.cman.jp/network/support/port.html

Webサーバーの設定変更

# ディレクトリ移動
cd /etc/nginx/conf.d

# 現設定ファイルのバックアップ
cp {WPディレクトリ名}_http.conf {WPディレクトリ名}_http.conf.org # http用
cp {WPディレクトリ名}_http.conf {WPディレクトリ名}_http.conf.org # https用
http用設定ファイルの編集
vim {WPディレクトリ名}_http.conf

# httpはhttpsへリダイレクト
server {
  listen 80;
  server_name {SSL対象ドメイン};
  return 301 https://{SSL対象ドメイン}$request_uri;
}
http用設定ファイルの編集
server {
    listen       443 ssl http2;
    server_name  {SSL対象ドメイン};

    ssl_certificate      /etc/letsencrypt/live/{SSL対象ドメイン}/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/{SSL対象ドメイン}/privkey.pem;
    ssl_dhparam /etc/kusanagi.d/ssl/dhparam.key;

    ssl_session_tickets     on;
    ssl_session_ticket_key     /etc/kusanagi.d/ssl_sess_ticket.key;

    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout  5m;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

    ssl_ciphers "EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH:ECDHE-RSA-AES2    56-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SH    A384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA25    6:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-    SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!    RC4";

    ssl_prefer_server_ciphers   on;
Nginxの再起動とSSLの確認
# kusanagiサーバーの場合
kusanagi restart
  • 再起動が完了したら実際にブラウザでアクセスしてhttpsになっているか確認
  • 今までのhttpのページからhttpsのページに301リダイレクトされるかの確認
  • SSL Server Testで暗号化レベルの確認

f:id:tsukarooohi:20170107190929p:plain

SSLの自動更新の設定

Let's Encryptの無料SSL証明書は有効期限が90日間となっているのですが、毎回手動で更新なんてしてられません。 Certbotクライアントには更新用のコマンドが用意されているため、それを1日/月にクーロンによって自動実行します。

# クーロン設定の確認
crontab -l
no crontab for root

# クーロン設定コマンド
crontab -e

# 毎月1日の1時に強制的に更新をします。
0 1 1 * * root /usr/local/src/certbot/certbot-auto renew –force-renew && systemctl restart nginx

# クーロンの設定確認
0 1 1 * * root /usr/local/src/certbot/certbot-auto renew –force-renew && systemctl restart nginx
crontab -l

これでLet's Encryptの無料SSL証明書の取得から設定、自動更新までが完了になります。 後は翌月にでもSSLの有効期限を確認し、ちゃんと更新されていれば問題なしです。

KUSANAGI for さくらへPostfix+Dovecotの導入方法

環境

Postfixの導入

# postfixのインストール(既にインストール済みなら必要ありません)
yum install postfix

# バージョン確認
postconf mail_version
mail_version = 2.10.1

# デフォルトMTAの切り替え
alternatives --config mta

1 プログラムがあり 'mta' を提供します。

  選択       コマンド
-----------------------------------------------
*+ 1           /usr/sbin/sendmail.postfix # postfixが選択されているか確認

Postfixの設定をする

# ディレクトリ移動
cd /etc/postfix

# コピー作成
cp main.cf main.cf.org

# 編集
vim main.cf

myhostname = mail.example.com
mydomain = example.com
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
home_mailbox = Maildir/
smtpd_banner = $myhostname ESMTP unknown

# ページ下部に追加
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtp_tls_security_level = may
smtpd_sasl_security_options = noanonymous
smtpd_recipient_restrictions =
  permit_mynetworks,
  permit_sasl_authenticated,
  reject_unauth_destination
# postfixの設定確認
postconf -n
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
broken_sasl_auth_clients = yes
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
debug_peer_level = 2
debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name $process_id & sleep 5
home_mailbox = Maildir/
html_directory = no
inet_interfaces = all
inet_protocols = all
mail_owner = postfix
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mydomain = example.com
myhostname = mail.example.com
myorigin = $mydomain
newaliases_path = /usr/bin/newaliases.postfix
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix-2.10.1/README_FILES
sample_directory = /usr/share/doc/postfix-2.10.1/samples
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
smtp_tls_security_level = may
smtpd_banner = $myhostname ESMTP unknown
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
unknown_local_recipient_reject_code = 550

master.cfの編集

# コピー
cp master.cf master.cf.org

# 変更
vim master.cf

submission inet n       -       n       -       -       smtpd
-o smtpd_sasl_auth_enable=yes
-o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
-o smtpd_recipient_restrictions=permit_sasl_authenticated,reject_unauth_destination

SMTP-Auth設定

yum install cyrus-sasl

# 起動
systemctl start saslauthd

# 自動起動設定
systemctl enable saslauthd

--

Dovecotの導入

# dovecotのインストール(既にインストール済みなら必要ありません)
yum install dovecot

# バージョン確認
dovecot --version
2.2.10

10-mail.confの設定

# ディレクトリ移動
cd /etc/dovecot/conf.d

# コピー作成
cp 10-mail.conf 10-mail.conf.org

# 設定変更
vim 10-mail.conf

- #mail_location =
+ mail_location = maildir:~/Maildir

10-auth.confの設定

# コピー作成
cp 10-auth.conf 10-auth.conf.org

# 設定変更
vim 10-auth.conf

- #disable_plaintext_auth = yes
+ disable_plaintext_auth = no

10-ssl.confの設定

# コピー作成
cp 10-ssl.conf 10-ssl.conf.org

# 設定変更
vim 10-ssl.conf

- ssl = required
+ ssl = no

Dovocotの起動+自動起動設定

# Dovecotの起動
systemctl start dovecot

# Dovecotの自動起動設定
systemctl enable dovecot

メールアカウント用システムユーザーの作成

# 自動でMaildir形式のメールボックスが作成されるように
mkdir -p /etc/skel/Maildir/{new,cur,tmp}

# パーミッション変更
chmod -R 700 /etc/skel/Maildir/

# ユーザー作成(メールアカウント用なのでSSH接続はさせない)
useradd -s /sbin/nologin info

# パスワード設定
passwd info
ユーザー info のパスワードを変更。
新しいパスワード: #パスワードを入力してエンター
新しいパスワードを再入力してください: #パスワードを入力してエンター
passwd: すべての認証トークンが正しく更新できました。

ポートの開放

# 現在利用可能なサービス(ポート)を確認します。
firewall-cmd --list-services

# 現在利用可能なポートを確認します。
firewall-cmd --list-ports

firewall-cmd --zone=public --add-service=smtp --permanent
firewall-cmd --zone=public --add-port=25/tcp --permanent
firewall-cmd --zone=public --add-port=587/tcp --permanent
firewall-cmd --zone=public --add-port=110/tcp --permanent
firewall-cmd --zone=public --add-port=143/tcp --permanent

レコードの設定

# `mail.example.com`にAレコードでIPアドレスを登録
mail.example.com. A 000.00.000.000 # サーバーのIPアドレス

# `example.com`にMXレコードで`10 mail.example.com.`を設定
example.com. MX 10 mail.example.com.

# `example.com`にTXTレコードで`"v=spf1 ip4:000.00.000.000 -all"`を設定
example.com. IN TXT "v=spf1 ip4:000.00.000.000 -all"

以上でメールの送受信の設定は完了です。 後はメールアカウントの追加などを行ってください。

KUSANAGI for さくらへのphpMyAdmin導入方法

環境
  • CentOS 7
  • KUSANAGI Version 8.0.1-2
  • nginx version: nginx/1.11.6
  • php7-fpm
用語解説
  • DL:ダウンロード

phpMyAdminインストールと設定

f:id:tsukarooohi:20161223151144p:plain

コマンド処理

今回はrootアカウントで行っていますが、それ以外の作業アカウントの場合はsudoコマンドを付与して行ってください。

# ディレクトリ移動
cd /usr/local/src

# 最新ソースをDL
wget https://files.phpmyadmin.net/phpMyAdmin/4.6.5.2/phpMyAdmin-4.6.5.2-all-languages.tar.gz

# `phpMyAdmin-4.6.5.2-all-languages.tar.gz`がDLされたか確認
ls
phpMyAdmin-4.6.5.2-all-languages.tar.gz

# 解凍処理
tar xvzf phpMyAdmin-4.6.5.2-all-languages.tar.gz

# 解凍されているか確認
ls -l
drwxr-xr-x 12 root root     4096 12月  6 07:36 phpMyAdmin-4.6.5.2-all-languages
-rw-r--r--  1 root root 10372131 12月  6 08:40 phpMyAdmin-4.6.5.2-all-languages.tar.gz

# 解凍したphpMyAdminを移動(移動先はどこでもいいと思いますがドキュメントルートより上の階層がいいと思います)
mv phpMyAdmin-4.6.5.2-all-languages /usr/share/phpMyAdmin

# 元ファイルの削除(しなくてもいいと思います)
rm -fr phpMyAdmin-4.6.5.2-all-languages.tar.gz

上記でphpMyAdminのDL+配置作業は完了です。

次はphpMyAdminをブラウザから利用するための設定に進みます。

ですがNginxのバーチャル設定の前にphp-fpmの設定を少し変更します

Nginxとphp-fpmとの接続に UNIX socket を指定できるようにします。

socket 通信を使うとTCPで接続するので127.0.0.1:9000でアクセスするより早いようです。

# ディレクトリ移動(移動しなくてもいいです)
cd /etc/php7-fpm.d

# ファイルの確認
ls -l
-rw-r--r-- 1 root root  4580 11月 11 10:17 php7-fpm.conf.kusanagi
-rw-r--r-- 1 root root 19021 11月 11 10:17 www.conf
-rw-r--r-- 1 root root 18513 11月 11 10:17 www.conf.default
-rw-r--r-- 1 root root 19021 11月 11 10:17 www.conf.kusanagi

# .kusanagi はKUSANAGI for さくらのオリジナル設定がされているようなので触りません
vim www.conf
- listen = 127.0.0.1:9000
+ listen = /var/run/php7-fpm/php-fpm.sock #こちらに変更

# `/var/run/php7-fpm/`を確認
ls /var/run/php7-fpm/
php7-fpm.pid
#まだ`php-fpm.sock`はありません

# ミドルウェアの再起動
kusanagi restart

# `/var/run/php7-fpm/`を確認
ls -l /var/run/php7-fpm/
srw-rw---- 1 httpd www  0 12月 22 20:41 php-fpm.sock # 出来てますね!
-rw-r--r-- 1 root  root 5 12月 22 20:41 php7-fpm.pid

php-fpm.sockのユーザー、グループが上記にと同じになっていない場合は同じになっている事を確認してください。

rootになっている場合もありますが、その場合は下記ページなどを参考に上記と同じユーザー、グループになるよう行ってください。

それではphpMyAdminを使えるように設定します

# `phpMyAdmin`用のnginx設定ファイル作成
vim /etc/nginx/conf.d/phpmyadmin.conf

phpmyadmin.confの中身

server {
    listen       80;
    server_name  phpmyadmin.example.com; # ドメイン部分はご自分の環境に合わせてください

    root   /usr/share/phpMyAdmin;
    index  index.php;

    allow 000.00.00.00; # アクセスを解除するIPを設定してください
    deny all; # 基本アクセスは不可にしておきます

    location / {
        try_files $uri $uri?$args $uri/ /index.php?$uri&$args /index.php?$args;
    }

    location ~ \.php$ {
        try_files $uri =404;
        include /etc/nginx/fastcgi_params;
        fastcgi_pass   unix:/var/run/php7-fpm/php-fpm.sock; # 先程作成した`.sock`ファイル
        fastcgi_index   index.php;
        fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
        #include         fastcgi_params;
    }
}
# 上記の設定が出来たらミドルウェアの再起動
kusanagi restart

phpMyAdminサブドメインの設定

Nginx側の設定は上記で終わってるので、後はDNSの設定でサーバーまで繋げるだけです。 私の場合AWSのRoute53を利用しているので下記のように設定しました。

f:id:tsukarooohi:20161223151240p:plain

DNSの設定が反映されたか確認

MacBook-Pro:~$ nslookup phpmyadmin.example.com

Non-authoritative answer:
Name:   phpmyadmin.example.com
Address: 123.45.678.910 # ご自分のサーバーのIP

ブラウザでアクセス

phpMyAdminの画面が表示されれば完了になります。