【習慣化】怠惰なエンジニアでも継続出来る記事執筆の仕組み

# はじめに
みなさんこんにちは。
はい、何を隠そう自分が怠惰なエンジニアです。
休日はゲームの誘惑に敗北し、無限にゲームをして気がついたらお腹が空き、気がついたら寝る時間になっていた。みたいなことがまぁまぁありました。

そんな自分でも毎日記事執筆をすることを習慣に出来てきたので、どのように取り組んだかをご紹介していきます。

# 3行まとめ
 - 完璧を目指さないで、**とりあえず書く**を意識しよう
 - 記事を書いたら自分を褒めて、圧倒的な自己効力感を高く持とう
 - 仕組み化や誰かに宣言をすることで自分を追い立てよう

## そもそもの記事を書く動機
なぜ記事を書くのかを再考してみました。

#### 会社を有名にするため
弊社は基本BtoBのビジネスをしているので、世間一般の方に会社を知ってもらう機会がなかなかないです。
これは採用活動にも影響するので、どうすれば有名になれるかを考え記事を書くことに至りました。
開発チームメンバー全員で記事を少しずつ書いて先日100本を超えました。:clap:
まだ目に見える効果は出ていないですが、カジュアル面談のときに「記事を書く会社なんです」と伝えると、自己学習する時間を評価してもらえると思ってもらえるのか、結構エンジニアの人たちにはウケが良いかなと思っています。
そろそろ記事読みました！って人に出会いたいです。

#### 社内全体で知識を共有するときに有用
社内Wikiとか使ってもいいんですが、Webに公開されていてログイン不要で見れるって探す手間が少なくて好きです。
加えて困ってる人たちが見れたらWin-Winですよね。

#### 書くことで学習した技術の理解度が上がる
あんまり理解出来ていないことって書き殴れないんですよね。
書いていると「あれってこういう仕組みだっけ？」や「この手順であってるっけ？」と自信がなくなって調べて、完全に理解して→っていうループを回すうちに技術の理解度が上がっていきます。

---
他にも色々書くことのメリットはありますが、主な記事を書く理由はこんな感じです。

## 記事を書くためのマインドセットを変える
普段記事を書かない人にとって、記事を書くってすごい大変なんですよね。
これはしっかり書こうとしちゃうからエネルギーをものすごく使うものになってしまっているからだと思います。
あとは、「自分が理解出来ていればわざわざ発信する必要なくない？」とかですかね。

こういうマインドセットだと、書き始めるまでの腰が重かったり、書き始めたのはいいが半日〜1日かかってしまい「記事を書くって大変だ」と思ってしまったりと**継続**することが苦痛になってしまいます。
なので、記事に対しての付き合い方を考えてみましょう。

### 大前提:完璧を目指すことをやめよう
まずは大前提として、**誰が見ても完璧な記事を書こうとすること。一回の記事執筆で完成まで書き上げること。** をやめましょう。

Meta CEOのマーク・ザッカーバーグも完璧より終わらせることが大事って言っていますね。
『Done is better than perfect.』(完璧を目指すよりまず終わらせろ)

自分はつい、誰にでも評価されるような崇高で偉大な記事を書こうとしちゃうんですよね。
結局かけた時間に対してフィードバックはそんな大きいものじゃないことが多く、反応が薄いと期待ハズレとなってしまい、やる気がなくなってしまいます。

### 終わらせることすら目指さない
ザッカーバーグの **「終わらせろ」** すら、目指さない。
終わらせることも大事なんですけど、やっぱり記事って誰にでも読まれるものなので、体裁や内容の正確性が気になっちゃうものです。なのでなかなか終わらないんです。
もちろんこれは慣れの部分も大いにあると思いますが、気がついたら終わっているぐらいライトな活動にしましょう。

## 記事を毎日書くこと > 記事を完成させること
「**毎日記事を書いていたら、自然と記事執筆が終わっていた**」を目指したいです。

### 毎日記事を書くことのハードルを可能な限り下げる
そのためには、毎日ゆるくやることを目指すのですが、とはいえ制限が何もないと結局やらなくなってしまいます。

#### **とりあえず書くファースト**
良いアイデアが思いついたら**とりあえず書く**
何かハマったらハマったことを**とりあえず書く**
気付きがあったら**とりあえず書く**
学習していることがあったら**とりあえず書く**

どんどん**とりあえず書く**をやっていきましょう！

#### **とりあえず書く**ために、記事をGit管理し、1日1コミットを目指す。
**とりあえず書く**ためにQiitaにアクセスして下書きを作成を押してとやっているのは書くためのハードルが高いです🥺
Git管理をして、慣れ親しんだコードエディタで記事を作りましょう。ついでにQiita CLIを入れておくともっと管理が楽になります！[Qiita CLIについて](https://qiita.com/Qiita/items/666e190490d0af90a92b)

そして**とりあえず書く**をするために、学んだことは全て記事にできないか判断し、下書きをどんどんストックしていきましょう。
まずは1日1コミットを目指しましょう！

### 書けたら自分を褒める！✨
めちゃくちゃ偉いです！自分が一番スゴイです！ご褒美にチョコでも食べましょう🍫
圧倒的な自己効力感を高く持ちましょう！
また、出来なくてもそこまで自分を責める必要はありません。無理しないことが大切です。

### 良い記事かどうかは気にしない
**とりあえず書く** ことが出来ればもう勝ちです。
良い記事だったかどうかを後から評価するのは良いですが、投稿するまでは良い記事かどうかを気にする必要はありません。

### サボらないための仕組みを作る
とは言っても「何も思いつかなかったから」とか「仕事が忙しかったから」とつい言い訳を自分の中で作ってしまいやらないことを正当化してしまいます。
自分も「今日はいいや」と疲れて記事を書かない日々がたくさん続いていました。

#### 1日1コミットしていないときは、通知をするようにする
ということで、サボらないようにするために1日に1回記事を書いたかチェックしてもらいます。
具体的にはGithub Actionsで1日に1回バッチ処理させましょう。

自分はこんな感じで書いてみました。

```.github/check_contributions.yml
name: Check Contributions and Notify Slack

on:
  schedule:
    - cron: '0 12 * * *' # UTC(JST 21:00)
  workflow_dispatch:

jobs:
  check_contributions:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Check contributions
        run: |
          TODAY=$(date -u +"%Y-%m-%d")
          CONTRIBUTIONS=$(git log --since="${TODAY}T00:00:00Z" --until="${TODAY}T23:59:59Z" --oneline | wc -l)
          echo "Number of contributions: $CONTRIBUTIONS"
          if [ "$CONTRIBUTIONS" -lt 1 ]; then
            echo "Insufficient contributions found for today."
            echo "insufficient_contributions=true" >> $GITHUB_ENV
          else
            echo "Sufficient contributions found for today."
            echo "insufficient_contributions=false" >> $GITHUB_ENV
          fi

      - name: Notify Slack
        if: env.insufficient_contributions == 'true'
        run: |
          curl -X POST -H 'Content-type: application/json' --data '{"text":"今日はまだコミットがありません。今すぐ記事を書きましょう。"}' ${{ secrets.SLACK_WEBHOOK_URL }}

      - name: Notify Slack - Sufficient Contributions
        if: env.insufficient_contributions == 'false'
        run: |
          curl -X POST -H 'Content-type: application/json' --data '{"text":"記事を書けてえらい！明日もコミットしような！"}' ${{ secrets.SLACK_WEBHOOK_URL }}
```

Slackへの通知は、Webhooksを作れば簡単にできます。[詳しくはこちら](https://api.slack.com/messaging/webhooks)

こんな感じで通知が来ます。
コミットしている時
![スクリーンショット 2024-06-17 21.09.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730384/de423a88-3849-e887-d112-c9890bd07afe.png)
コミットしていない時
![スクリーンショット 2024-06-17 21.17.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730384/9b6e9dee-c259-cdaa-c4c2-c600416c819e.png)

誰かに言われると「書かないと！」と言われている気がして、意外にやれるものです。そもそも忘れていることもありますから自分にとっては良い仕組みでした。

#### 誰かに宣言をすることで強制力を高くする
これは社内の人でもいいです。出来たら公の場で「自分は毎日記事を書きます！」と宣言するとなお良いです。
意外と口にすると出来るようになりますので、おすすめです。

#### 一緒にやってくれる人を探す
他にも一緒に記事を書いてくれる同士を見つけるとモチベーションが高く保てます。
自分が記事を書けていない日が続いたりすると、負けてられないですよね:fire:

# とりあえず続けることの大切さ
[ジェームズ・クリアー式 複利で伸びる1つの習慣](https://www.amazon.co.jp/dp/B07YY2WV6K)という本には、『毎日1%良くなれば1年で37倍も良くなる』というお話があります。
**『継続は力なり』** の通り、毎日の積み重ねが大きな変化をもたらします。
どんなに些細なことでもいいのでまずは続ける、**1コミットする**、というのが大事だと思います。
続けていれば記事を書けない人から記事を書ける人に変われます。
みなさんも一緒に記事を書きましょう！


#### 参考文献
 - [GitHub Actions Event that trigger workflows](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#schedule)
 - [ジェームズ・クリアー式 複利で伸びる1つの習慣](https://www.amazon.co.jp/dp/B07YY2WV6K)