goofmint 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.local.json +17 -0
- package/.github/workflows/deploy.yml +44 -0
- package/.nvmrc +1 -0
- package/.ruby-version +1 -0
- package/DEPLOYMENT.md +111 -0
- package/Gemfile +10 -0
- package/README.md +118 -0
- package/_config.yml +77 -0
- package/_data/i18n.yml +86 -0
- package/_data/social.yml +19 -0
- package/_includes/footer.html +18 -0
- package/_includes/header.html +42 -0
- package/_includes/i18n.html +2 -0
- package/_layouts/default.html +25 -0
- package/_layouts/post.html +18 -0
- package/_layouts/project.html +37 -0
- package/_posts/2025-01-03-welcome.md +62 -0
- package/_posts/en/2025-01-03-welcome.md +61 -0
- package/_projects/bug-sniper.md +28 -0
- package/_projects/caiz.md +29 -0
- package/_projects/drowl.md +28 -0
- package/_projects/incho-app.md +32 -0
- package/_projects/moongift.md +33 -0
- package/_projects/review-game.md +28 -0
- package/_projects/sheetdb.md +30 -0
- package/_projects/text2cal.md +49 -0
- package/_projects_en/bug-sniper.md +28 -0
- package/_projects_en/caiz.md +29 -0
- package/_projects_en/drowl.md +28 -0
- package/_projects_en/incho-app.md +32 -0
- package/_projects_en/moongift.md +33 -0
- package/_projects_en/review-game.md +28 -0
- package/_projects_en/sheetdb.md +30 -0
- package/_projects_en/text2cal.md +49 -0
- package/_sass/_base.scss +58 -0
- package/_sass/_components.scss +113 -0
- package/_sass/_layout.scss +140 -0
- package/_sass/_syntax.scss +137 -0
- package/_sass/_theme.scss +261 -0
- package/about.md +182 -0
- package/assets/css/main.scss +68 -0
- package/assets/images/atsushi.jpg +0 -0
- package/assets/images/daruma.jpeg +0 -0
- package/assets/images/icons/email.svg +1 -0
- package/assets/images/icons/github.svg +1 -0
- package/assets/images/icons/linkedin.svg +1 -0
- package/assets/images/icons/x.svg +1 -0
- package/assets/images/moveum.jpeg +0 -0
- package/assets/images/notes.jpeg +0 -0
- package/assets/js/lang-toggle.js +89 -0
- package/assets/js/theme-toggle.js +69 -0
- package/blog.html +21 -0
- package/en/about.md +180 -0
- package/en/blog.html +21 -0
- package/en/index.html +45 -0
- package/en/projects.html +26 -0
- package/index.html +45 -0
- package/index.js +321 -0
- package/package.json +43 -0
- package/projects.html +29 -0
package/about.md
ADDED
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
---
|
|
2
|
+
layout: default
|
|
3
|
+
title: About
|
|
4
|
+
permalink: /about/
|
|
5
|
+
lang: ja
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
{% include i18n.html %}
|
|
9
|
+
|
|
10
|
+
# アツシについて
|
|
11
|
+
|
|
12
|
+
CodeRabbit デベロッパーアドボケイト、株式会社MOONGIFT代表取締役、一般社団法人DevRel代表理事。プログラマ、エンジニアとしていくつかの企業で働き、28歳のときに独立。2004年、まだ情報が少なかったオープンソースソフトの技術ブログ『MOONGIFT』を開設し、毎日情報を発信している。2013年に法人化、ビジネスとエンジニアを結ぶエバンジェリスト業「DevRel」活動をスタートした。ソーシャルIDはすべて goofmint
|
|
13
|
+
|
|
14
|
+

|
|
15
|
+
|
|
16
|
+
## 主なスキル
|
|
17
|
+
|
|
18
|
+
- Developer Relations (DevRel)
|
|
19
|
+
- コミュニティ構築・運営
|
|
20
|
+
- コンテンツ制作(ブログ、動画、ポッドキャスト)
|
|
21
|
+
- プログラミング(JavaScript/TypeScript、Python、Ruby、PHP、Dart/Flutter、Java、PHP、C#、Kotlin、VBAなど)
|
|
22
|
+
|
|
23
|
+
## 経歴
|
|
24
|
+
|
|
25
|
+
日本およびグローバル市場において11年以上のDevRel経験を持つ。
|
|
26
|
+
B2C・B2B双方での実績を持ち、高い契約クローズ率、エンタープライズの交渉、国際的な開発者コミュニティ構築を主導。
|
|
27
|
+
Claude Code、GitHub Copilot、Cursor などを活用したAI支援開発に精通し、日米印を中心としたクロスカルチャー連携を強みとする。
|
|
28
|
+
|
|
29
|
+
#### CEO — MOONGIFT(2013年10月〜現在)
|
|
30
|
+
|
|
31
|
+
- 技術メディア MOONGIFT を運営
|
|
32
|
+
- 100社以上への DevRel as a Service 提供
|
|
33
|
+
- DevRel/Tokyo、各種ミートアップ・国際コミュニティの立ち上げ・運営
|
|
34
|
+
- 技術記事500本以上を執筆
|
|
35
|
+
- 10以上の言語で50以上のSDKを開発
|
|
36
|
+
|
|
37
|
+
#### デベロッパーアドボケイト — CodeRabbit(2025年1月〜現在)
|
|
38
|
+
|
|
39
|
+
**主な業務**
|
|
40
|
+
|
|
41
|
+
- 日本市場における DevRel / 開発者マーケティングの統括
|
|
42
|
+
- 日本と米国本社間のプロダクト・ビジネス連携
|
|
43
|
+
- 顧客フィードバックの翻訳・要件整理
|
|
44
|
+
- エンタープライズ契約・価格交渉支援
|
|
45
|
+
- 技術コンテンツ・コミュニケーション戦略設計
|
|
46
|
+
|
|
47
|
+
**成果**
|
|
48
|
+
|
|
49
|
+
- 複雑なエンタープライズ案件20件以上を解決
|
|
50
|
+
- 日米協業の再現性あるフレームワークを確立
|
|
51
|
+
- 日本国内の開発者コミュニティ形成を推進
|
|
52
|
+
|
|
53
|
+
#### テクノロジーエバンジェリスト — blastengine(2021年12月〜2025年3月)
|
|
54
|
+
|
|
55
|
+
- メール配信サービス「blastengine」のエバンジェリスト
|
|
56
|
+
- 技術ブログ・ドキュメント執筆
|
|
57
|
+
- SDK開発(Python / PHP / Ruby / Java)
|
|
58
|
+
- カンファレンス登壇・ワークショップ実施
|
|
59
|
+
|
|
60
|
+
#### テクノロジーエバンジェリスト — GROWI(2024年5月〜2025年3月)
|
|
61
|
+
|
|
62
|
+
- OSS Wiki「GROWI」の技術発信
|
|
63
|
+
- 開発者コミュニティ運営
|
|
64
|
+
- APIドキュメント・SDK整備
|
|
65
|
+
|
|
66
|
+
#### テクノロジーエバンジェリスト — Hexabase(2022年8月〜2024年6月)
|
|
67
|
+
|
|
68
|
+
- エンタープライズ向けBaaSの技術普及
|
|
69
|
+
- 技術ブログ・ユースケース作成
|
|
70
|
+
- ハッカソン・コミュニティイベント企画
|
|
71
|
+
|
|
72
|
+
#### テクノロジーエバンジェリスト — ニフクラ mobile backend(2014年4月〜2023年11月)
|
|
73
|
+
|
|
74
|
+
- ニフクラ mobile backend(mBaaS)のエバンジェリスト
|
|
75
|
+
- 技術記事200本以上執筆
|
|
76
|
+
- 年10回以上の法人向けセミナー実施
|
|
77
|
+
- SDK開発(Python / Java / Flutter / React Native / GAS / VBA)
|
|
78
|
+
|
|
79
|
+
### コミュニティ活動
|
|
80
|
+
|
|
81
|
+
#### DevRel/Tokyo(2015年9月〜現在)
|
|
82
|
+
|
|
83
|
+
- 創設者・運営
|
|
84
|
+
- メンバー数 2,200名以上
|
|
85
|
+
- 月例イベント、週次ポッドキャスト(DevRel Radio)
|
|
86
|
+
|
|
87
|
+
#### DevRel Meetup in Bengaluru(2017年8月〜現在)
|
|
88
|
+
|
|
89
|
+
- インド・バンガロールでの DevRel コミュニティ設立
|
|
90
|
+
- 日本とインドの知見交流を促進
|
|
91
|
+
|
|
92
|
+
#### Monacaソムリエプログラム(2017年8月〜2020年4月)
|
|
93
|
+
|
|
94
|
+
- 日本初のモバイル開発者チャンピオン制度
|
|
95
|
+
- 選定基準・評価フレームワーク設計
|
|
96
|
+
- 20社以上のエンタープライズ導入に影響
|
|
97
|
+
|
|
98
|
+
### カンファレンス運営
|
|
99
|
+
|
|
100
|
+
- DevRelKaigi Tokyo 2025
|
|
101
|
+
- DevRelCon Tokyo(2017〜2023)
|
|
102
|
+
- DevRel/Japan Conference(2019〜2024)
|
|
103
|
+
- DevRel/Asia 2020(オンライン・アジア横断)
|
|
104
|
+
- Global AI Hackathon Tokyo 2017
|
|
105
|
+
- PWA Night Conference(2019〜2022)
|
|
106
|
+
|
|
107
|
+
### 執筆・編集
|
|
108
|
+
|
|
109
|
+
- 技術ブログ執筆:アシアル、HENNGE、ヴァル研究所、バルテス
|
|
110
|
+
- 事例編集:クラスメソッド
|
|
111
|
+
|
|
112
|
+
### 以前の職歴
|
|
113
|
+
|
|
114
|
+
- プロジェクトマネージャー(miil)
|
|
115
|
+
- システム開発・コンサルティング(フリーランス)
|
|
116
|
+
- 社内SE(iREP)
|
|
117
|
+
- プログラマー(ラクーン)
|
|
118
|
+
- 品質管理エンジニア(AIM電子)
|
|
119
|
+
|
|
120
|
+
### 学歴
|
|
121
|
+
|
|
122
|
+
- 東京工業高等専門学校(機械工学科 学士)
|
|
123
|
+
|
|
124
|
+
### 技術発信実績
|
|
125
|
+
|
|
126
|
+
#### Qiita
|
|
127
|
+
|
|
128
|
+
- 記事数 720本
|
|
129
|
+
- 56か月連続投稿
|
|
130
|
+
- 総コントリビューション 2,752
|
|
131
|
+
|
|
132
|
+
#### Zenn
|
|
133
|
+
|
|
134
|
+
- 記事数 75本
|
|
135
|
+
- いいね数 197
|
|
136
|
+
|
|
137
|
+
### AI支援開発の経験
|
|
138
|
+
|
|
139
|
+
- CodeRabbit
|
|
140
|
+
- Claude Code
|
|
141
|
+
- GitHub Copilot
|
|
142
|
+
- Cursor
|
|
143
|
+
- Codex
|
|
144
|
+
|
|
145
|
+
#### 最近の主なOSSプロジェクト
|
|
146
|
+
|
|
147
|
+
- [BugSniper](https://github.com/goofmint/BugSniper)
|
|
148
|
+
- [CommunityBook](https://github.com/goofmint/CommunityBook)
|
|
149
|
+
- [ReviewGame](https://github.com/goofmint/ReviewGame)
|
|
150
|
+
- [DRowl](https://github.com/goofmint/drowl)
|
|
151
|
+
- [RabbitKanban](https://github.com/goofmint/RabbitKanban)
|
|
152
|
+
- [SheetDB](https://github.com/goofmint/sheet-db)
|
|
153
|
+
- [Text2Cal](https://github.com/goofmint/Text2Cal)
|
|
154
|
+
- [Eluma](https://github.com/goofmint/eluma.dev)
|
|
155
|
+
|
|
156
|
+
### スキル
|
|
157
|
+
|
|
158
|
+
- **言語:** Python, JavaScript/TypeScript, Google Apps Script, Go, Java, Dart/Flutter, C#, PHP, Ruby, Swift, Kotlin, VBA
|
|
159
|
+
- **フレームワーク:** React Router, Hono, Vue, Remix, Next.js, Flutter
|
|
160
|
+
- **言語能力:** 日本語(母語)、英語(ビジネス)
|
|
161
|
+
|
|
162
|
+
### 商業出版
|
|
163
|
+
|
|
164
|
+
- [DevRel エンジニアフレンドリーになるための3C](https://www.shoeisha.co.jp/book/detail/9784798161068)
|
|
165
|
+
- [Dockerエキスパート養成読本[活用の基礎と実践ノウハウ満載!]](https://www.amazon.co.jp/dp/4774174416)
|
|
166
|
+
- [開発者向けマーケティング DevRel Q&A](https://www.amazon.co.jp/dp/B0814N5WLW)
|
|
167
|
+
- [一冊で分かる!オンラインイベントのはじめかた](https://www.amazon.co.jp/dp/B08PK5J8T1)
|
|
168
|
+
- [英語で広がる開発者のキャリア](https://www.amazon.co.jp/dp/4844379550)
|
|
169
|
+
|
|
170
|
+
### パッケージ配布
|
|
171
|
+
|
|
172
|
+
- npm: [https://www.npmjs.com/~moongift](https://www.npmjs.com/~moongift)
|
|
173
|
+
- PyPI: [https://pypi.org/user/goofmint/](https://pypi.org/user/goofmint/)
|
|
174
|
+
- Packagist: [https://packagist.org/users/goofmint/packages/](https://packagist.org/users/goofmint/packages/)
|
|
175
|
+
- RubyGems: [https://rubygems.org/profiles/moongift](https://rubygems.org/profiles/moongift)
|
|
176
|
+
- pub.dev: [https://pub.dev/packages/hexabase](https://pub.dev/packages/hexabase)
|
|
177
|
+
|
|
178
|
+
### 問い合わせ
|
|
179
|
+
|
|
180
|
+
- Email: [atsushi@moongift.jp](mailto:atsushi@moongift.jp)
|
|
181
|
+
- X/Twitter: [@goofmint](https://twitter.com/goofmint)
|
|
182
|
+
- LinkedIn: [Atsushi Nakatsugawa](https://www.linkedin.com/in/goofmint/)
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
---
|
|
2
|
+
---
|
|
3
|
+
|
|
4
|
+
@import "base";
|
|
5
|
+
@import "layout";
|
|
6
|
+
@import "components";
|
|
7
|
+
@import "theme";
|
|
8
|
+
@import "syntax";
|
|
9
|
+
|
|
10
|
+
// Responsive design
|
|
11
|
+
@media (max-width: 768px) {
|
|
12
|
+
.site-header .wrapper {
|
|
13
|
+
flex-direction: column;
|
|
14
|
+
gap: 15px;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.header-right {
|
|
18
|
+
flex-direction: column;
|
|
19
|
+
width: 100%;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.site-nav {
|
|
23
|
+
flex-direction: column;
|
|
24
|
+
gap: 10px !important;
|
|
25
|
+
text-align: center;
|
|
26
|
+
width: 100%;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.header-controls {
|
|
30
|
+
justify-content: center;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.hero h1 {
|
|
34
|
+
font-size: 2em !important;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.project-grid {
|
|
38
|
+
grid-template-columns: 1fr;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Status tag styles
|
|
43
|
+
.tech-tag.status-progress {
|
|
44
|
+
background-color: #ffeb3b;
|
|
45
|
+
color: #000;
|
|
46
|
+
}
|
|
47
|
+
.tech-tag.status-working {
|
|
48
|
+
background-color: #4caf50;
|
|
49
|
+
color: #fff;
|
|
50
|
+
}
|
|
51
|
+
.tech-tag.status-archived {
|
|
52
|
+
background-color: #9e9e9e;
|
|
53
|
+
color: #fff;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.page-content ul {
|
|
57
|
+
list-style-type: disc;
|
|
58
|
+
padding-left: 20px;
|
|
59
|
+
padding-bottom: 20px;
|
|
60
|
+
}
|
|
61
|
+
.page-content ul li {
|
|
62
|
+
margin-left: 16px;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.page-content img {
|
|
66
|
+
max-width: 30%;
|
|
67
|
+
height: auto;
|
|
68
|
+
}
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24"><path fill="currentColor" d="m20 8l-8 5l-8-5V6l8 5l8-5m0-2H4c-1.11 0-2 .89-2 2v12a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24"><path fill="currentColor" d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5c.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34c-.46-1.16-1.11-1.47-1.11-1.47c-.91-.62.07-.6.07-.6c1 .07 1.53 1.03 1.53 1.03c.87 1.52 2.34 1.07 2.91.83c.09-.65.35-1.09.63-1.34c-2.22-.25-4.55-1.11-4.55-4.92c0-1.11.38-2 1.03-2.71c-.1-.25-.45-1.29.1-2.64c0 0 .84-.27 2.75 1.02c.79-.22 1.65-.33 2.5-.33s1.71.11 2.5.33c1.91-1.29 2.75-1.02 2.75-1.02c.55 1.35.2 2.39.1 2.64c.65.71 1.03 1.6 1.03 2.71c0 3.82-2.34 4.66-4.57 4.91c.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24"><path fill="currentColor" d="M19 3a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2zm-.5 15.5v-5.3a3.26 3.26 0 0 0-3.26-3.26c-.85 0-1.84.52-2.32 1.3v-1.11h-2.79v8.37h2.79v-4.93c0-.77.62-1.4 1.39-1.4a1.4 1.4 0 0 1 1.4 1.4v4.93zM6.88 8.56a1.68 1.68 0 0 0 1.68-1.68c0-.93-.75-1.69-1.68-1.69a1.69 1.69 0 0 0-1.69 1.69c0 .93.76 1.68 1.69 1.68m1.39 9.94v-8.37H5.5v8.37"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>X</title><path d="M14.234 10.162 22.977 0h-2.072l-7.591 8.824L7.251 0H.258l9.168 13.343L.258 24H2.33l8.016-9.318L16.749 24h6.993zm-2.837 3.299-.929-1.329L3.076 1.56h3.182l5.965 8.532.929 1.329 7.754 11.09h-3.182z"/></svg>
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
(function() {
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
const STORAGE_KEY = 'lang-preference';
|
|
5
|
+
|
|
6
|
+
// Get browser language
|
|
7
|
+
const getBrowserLang = () => {
|
|
8
|
+
const browserLang = navigator.language || navigator.userLanguage;
|
|
9
|
+
return browserLang.startsWith('ja') ? 'ja' : 'en';
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
// Get saved language or default to browser language
|
|
13
|
+
const getLang = () => {
|
|
14
|
+
const savedLang = localStorage.getItem(STORAGE_KEY);
|
|
15
|
+
if (savedLang) {
|
|
16
|
+
return savedLang;
|
|
17
|
+
}
|
|
18
|
+
return getBrowserLang();
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
// Save language preference
|
|
22
|
+
const setLang = (lang) => {
|
|
23
|
+
localStorage.setItem(STORAGE_KEY, lang);
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
// Get current page path
|
|
27
|
+
const getCurrentPath = () => {
|
|
28
|
+
return window.location.pathname;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
// Toggle language and redirect
|
|
32
|
+
const toggleLang = () => {
|
|
33
|
+
const currentPath = getCurrentPath();
|
|
34
|
+
const currentLang = currentPath.startsWith('/en/') ? 'en' : 'ja';
|
|
35
|
+
const newLang = currentLang === 'ja' ? 'en' : 'ja';
|
|
36
|
+
|
|
37
|
+
setLang(newLang);
|
|
38
|
+
|
|
39
|
+
// Redirect to the same page in different language
|
|
40
|
+
let newPath;
|
|
41
|
+
if (newLang === 'en') {
|
|
42
|
+
// Switch to English
|
|
43
|
+
if (currentPath === '/' || currentPath === '/index.html') {
|
|
44
|
+
newPath = '/en/';
|
|
45
|
+
} else {
|
|
46
|
+
newPath = '/en' + currentPath;
|
|
47
|
+
}
|
|
48
|
+
} else {
|
|
49
|
+
// Switch to Japanese
|
|
50
|
+
newPath = currentPath.replace(/^\/en\//, '/').replace(/^\/en$/, '/');
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
window.location.href = newPath;
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
// Initialize language on first visit
|
|
57
|
+
const initLang = () => {
|
|
58
|
+
const savedLang = localStorage.getItem(STORAGE_KEY);
|
|
59
|
+
if (!savedLang) {
|
|
60
|
+
const browserLang = getBrowserLang();
|
|
61
|
+
const currentPath = getCurrentPath();
|
|
62
|
+
const isEnglishPage = currentPath.startsWith('/en/');
|
|
63
|
+
|
|
64
|
+
// If browser is English but on Japanese page, redirect
|
|
65
|
+
if (browserLang === 'en' && !isEnglishPage && currentPath === '/') {
|
|
66
|
+
window.location.href = '/en/';
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
// Initialize on page load
|
|
72
|
+
initLang();
|
|
73
|
+
|
|
74
|
+
// Add event listener when DOM is ready
|
|
75
|
+
document.addEventListener('DOMContentLoaded', () => {
|
|
76
|
+
const toggleButton = document.querySelector('.lang-toggle');
|
|
77
|
+
|
|
78
|
+
if (toggleButton) {
|
|
79
|
+
toggleButton.addEventListener('click', toggleLang);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// Update button text based on current language
|
|
83
|
+
const currentPath = getCurrentPath();
|
|
84
|
+
const currentLang = currentPath.startsWith('/en/') ? 'en' : 'ja';
|
|
85
|
+
if (toggleButton) {
|
|
86
|
+
toggleButton.textContent = currentLang === 'ja' ? 'EN' : 'JA';
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
})();
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
(function() {
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
const STORAGE_KEY = 'theme-preference';
|
|
5
|
+
|
|
6
|
+
// Get system preference
|
|
7
|
+
const getSystemTheme = () => {
|
|
8
|
+
if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {
|
|
9
|
+
return 'dark';
|
|
10
|
+
}
|
|
11
|
+
return 'light';
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
// Get saved theme or default to system preference
|
|
15
|
+
const getTheme = () => {
|
|
16
|
+
const savedTheme = localStorage.getItem(STORAGE_KEY);
|
|
17
|
+
if (savedTheme) {
|
|
18
|
+
return savedTheme;
|
|
19
|
+
}
|
|
20
|
+
return getSystemTheme();
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
// Get current theme from DOM
|
|
24
|
+
const getCurrentTheme = () => {
|
|
25
|
+
return document.documentElement.getAttribute('data-theme') || getTheme();
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
// Save theme preference
|
|
29
|
+
const setTheme = (theme) => {
|
|
30
|
+
localStorage.setItem(STORAGE_KEY, theme);
|
|
31
|
+
document.documentElement.setAttribute('data-theme', theme);
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
// Toggle between light and dark
|
|
35
|
+
const toggleTheme = () => {
|
|
36
|
+
const currentTheme = getCurrentTheme();
|
|
37
|
+
const newTheme = currentTheme === 'light' ? 'dark' : 'light';
|
|
38
|
+
setTheme(newTheme);
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
// Initialize theme on page load
|
|
42
|
+
const initTheme = () => {
|
|
43
|
+
const theme = getTheme();
|
|
44
|
+
document.documentElement.setAttribute('data-theme', theme);
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
// Initialize immediately (before page renders)
|
|
48
|
+
initTheme();
|
|
49
|
+
|
|
50
|
+
// Add event listener when DOM is ready
|
|
51
|
+
document.addEventListener('DOMContentLoaded', () => {
|
|
52
|
+
const toggleButton = document.querySelector('.theme-toggle');
|
|
53
|
+
|
|
54
|
+
if (toggleButton) {
|
|
55
|
+
toggleButton.addEventListener('click', toggleTheme);
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
// Listen for system theme changes (optional)
|
|
60
|
+
if (window.matchMedia) {
|
|
61
|
+
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (e) => {
|
|
62
|
+
// Only auto-update if user hasn't manually set a preference
|
|
63
|
+
if (!localStorage.getItem(STORAGE_KEY)) {
|
|
64
|
+
const newTheme = e.matches ? 'dark' : 'light';
|
|
65
|
+
document.documentElement.setAttribute('data-theme', newTheme);
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
})();
|
package/blog.html
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
layout: default
|
|
3
|
+
title: Blog
|
|
4
|
+
permalink: /blog/
|
|
5
|
+
lang: ja
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
{% include i18n.html %}
|
|
9
|
+
|
|
10
|
+
<h1>{{ t.blog.title }}</h1>
|
|
11
|
+
|
|
12
|
+
<ul class="post-list">
|
|
13
|
+
{% assign ja_posts = site.posts | where: "lang", "ja" %}
|
|
14
|
+
{% for post in ja_posts %}
|
|
15
|
+
<li class="post-item">
|
|
16
|
+
<h2><a href="{{ post.url | relative_url }}">{{ post.title }}</a></h2>
|
|
17
|
+
<p class="post-meta">{{ post.date | date: "%Y年%m月%d日" }}</p>
|
|
18
|
+
<p>{{ post.excerpt }}</p>
|
|
19
|
+
</li>
|
|
20
|
+
{% endfor %}
|
|
21
|
+
</ul>
|
package/en/about.md
ADDED
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
---
|
|
2
|
+
layout: default
|
|
3
|
+
title: About
|
|
4
|
+
permalink: /en/about
|
|
5
|
+
lang: en
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
{% include i18n.html %}
|
|
9
|
+
|
|
10
|
+
# About Atsushi
|
|
11
|
+
|
|
12
|
+
CodeRabbit Developer Advocate, CEO of MOONGIFT Inc., and Representative Director of the DevRel Association. After working as a programmer and engineer at several companies, he became independent at the age of 28. In 2004, when information on open source software was still scarce, he launched the technical blog *MOONGIFT* and has been publishing content daily ever since. He incorporated the business in 2013 and began evangelism activities in Developer Relations (DevRel), bridging business and engineers. All social IDs are **goofmint**.
|
|
13
|
+
|
|
14
|
+

|
|
15
|
+
|
|
16
|
+
## Skills
|
|
17
|
+
|
|
18
|
+
* Developer Relations (DevRel)
|
|
19
|
+
* Community building and management
|
|
20
|
+
* Content creation (blogs, videos, podcasts)
|
|
21
|
+
* Programming (JavaScript/TypeScript, Python, Ruby, PHP, Dart/Flutter, Java, C#, Kotlin, VBA, etc.)
|
|
22
|
+
|
|
23
|
+
## Experience
|
|
24
|
+
|
|
25
|
+
DevRel leader with 11+ years of experience building Japanese developer ecosystems for global tech companies. Proven impact across B2C and B2B domains, including 100% contract closure, enterprise negotiations, and large-scale community building. Expert in AI-assisted development (Claude Code, GitHub Copilot, Cursor) and cross-cultural collaboration.
|
|
26
|
+
|
|
27
|
+
### CEO — MOONGIFT (Oct 2013 – Present)
|
|
28
|
+
|
|
29
|
+
- Operates own media platform MOONGIFT
|
|
30
|
+
- DevRel as a Service for 100+ technology companies
|
|
31
|
+
- Organized DevRel/Tokyo, DevRel Meetup, and international communities
|
|
32
|
+
- Published 500+ technical articles
|
|
33
|
+
- Created 50+ SDKs in 10+ programming languages
|
|
34
|
+
|
|
35
|
+
### Developer Advocate — CodeRabbit (Jan 2025 – Present)
|
|
36
|
+
|
|
37
|
+
**Primary Responsibilities**
|
|
38
|
+
|
|
39
|
+
- Japanese DevRel and developer marketing for AI code review product
|
|
40
|
+
- Cross-cultural coordination between Japan and US headquarters
|
|
41
|
+
- Customer advocacy and enterprise negotiation
|
|
42
|
+
- Content strategy and localization
|
|
43
|
+
|
|
44
|
+
**Results**
|
|
45
|
+
|
|
46
|
+
- Resolved 20+ complex enterprise account issues
|
|
47
|
+
- Established repeatable Japan–US collaboration frameworks
|
|
48
|
+
- Built developer communities across Japan
|
|
49
|
+
|
|
50
|
+
### Technology Evangelist — blastengine (Dec 2021 – Mar 2025)
|
|
51
|
+
|
|
52
|
+
- Technical blog writing and documentation
|
|
53
|
+
- SDK development (Python, PHP, Ruby, Java)
|
|
54
|
+
- Conference speaking and workshops
|
|
55
|
+
- Evangelist for email delivery service *blastengine*
|
|
56
|
+
|
|
57
|
+
### Technology Evangelist — GROWI (May 2024 – Mar 2025)
|
|
58
|
+
|
|
59
|
+
- Open-source wiki platform evangelism
|
|
60
|
+
- Community management and developer support
|
|
61
|
+
- API documentation and SDK development
|
|
62
|
+
|
|
63
|
+
### Technology Evangelist — Hexabase (Aug 2022 – Jun 2024)
|
|
64
|
+
|
|
65
|
+
- BaaS evangelism for enterprise developers
|
|
66
|
+
- Technical blogging and use case documentation
|
|
67
|
+
- Hackathon and community event design
|
|
68
|
+
|
|
69
|
+
### Technology Evangelist — Nifty Cloud Mobile Backend (Apr 2014 – Nov 2023)
|
|
70
|
+
|
|
71
|
+
- Evangelist for Nifty Cloud mobile backend (mBaaS)
|
|
72
|
+
- 200+ technical articles
|
|
73
|
+
- 10+ annual enterprise seminars
|
|
74
|
+
- SDK development (Python, Java, Flutter, React Native, GAS, VBA)
|
|
75
|
+
|
|
76
|
+
## Community Leadership
|
|
77
|
+
|
|
78
|
+
### DevRel/Tokyo (Sep 2015 – Present)
|
|
79
|
+
|
|
80
|
+
- Founder and manager
|
|
81
|
+
- 2,200+ active members
|
|
82
|
+
- Monthly events and weekly podcast (DevRel Radio)
|
|
83
|
+
|
|
84
|
+
### DevRel Meetup in Bengaluru (Aug 2017 – Present)
|
|
85
|
+
|
|
86
|
+
- Founder and community manager
|
|
87
|
+
- Cross-border DevRel knowledge exchange (Japan ↔ India)
|
|
88
|
+
|
|
89
|
+
### Monaca Sommelier Program (Aug 2017 – Apr 2020)
|
|
90
|
+
|
|
91
|
+
- Japan’s first mobile development champion program
|
|
92
|
+
- Designed selection criteria and advocacy framework
|
|
93
|
+
- 20+ enterprise adoptions influenced
|
|
94
|
+
|
|
95
|
+
## Conference Organizer
|
|
96
|
+
|
|
97
|
+
- **DevRelKaigi Tokyo 2025**
|
|
98
|
+
- **DevRelCon Tokyo Series** (2017–2023)
|
|
99
|
+
- **DevRel/Japan Conference** (2019–2024)
|
|
100
|
+
- **DevRel/Asia 2020** (Online, pan-Asia)
|
|
101
|
+
- **Global AI Hackathon Tokyo 2017**
|
|
102
|
+
- **PWA Night Conference** (2019–2022)
|
|
103
|
+
|
|
104
|
+
## Blog & Editorial Work
|
|
105
|
+
|
|
106
|
+
- Blog Writer: Asial, HENNGE, Val Laboratory, Valtes
|
|
107
|
+
- Case Study Editor: Classmethod
|
|
108
|
+
|
|
109
|
+
## Previous Experience
|
|
110
|
+
|
|
111
|
+
- Project Manager — Miil Inc.
|
|
112
|
+
- System Development & Consulting (Freelance)
|
|
113
|
+
- Office Engineer — iREP Inc.
|
|
114
|
+
- Programmer — Racoon Inc.
|
|
115
|
+
- Quality Control Engineer — AIM Electronics
|
|
116
|
+
|
|
117
|
+
## Education
|
|
118
|
+
|
|
119
|
+
- **Bachelor of Science, Mechanical Engineering**
|
|
120
|
+
National Institute of Technology, Tokyo College
|
|
121
|
+
|
|
122
|
+
## Japanese Developer Platform Presence
|
|
123
|
+
|
|
124
|
+
### Qiita
|
|
125
|
+
|
|
126
|
+
- 720 articles
|
|
127
|
+
- 56+ consecutive months
|
|
128
|
+
- 2,752 contributions
|
|
129
|
+
|
|
130
|
+
### Zenn
|
|
131
|
+
|
|
132
|
+
- 75 articles
|
|
133
|
+
- 197 likes
|
|
134
|
+
|
|
135
|
+
## AI-Driven Development Expertise
|
|
136
|
+
|
|
137
|
+
- CodeRabbit
|
|
138
|
+
- Claude Code
|
|
139
|
+
- GitHub Copilot
|
|
140
|
+
- Cursor
|
|
141
|
+
- Codex
|
|
142
|
+
|
|
143
|
+
### Recently OSS Projects
|
|
144
|
+
|
|
145
|
+
- [BugSniper](https://github.com/goofmint/BugSniper)
|
|
146
|
+
- [CommunityBook](https://github.com/goofmint/CommunityBook)
|
|
147
|
+
- [ReviewGame](https://github.com/goofmint/ReviewGame)
|
|
148
|
+
- [DRowl](https://github.com/goofmint/drowl)
|
|
149
|
+
- [RabbitKanban](https://github.com/goofmint/RabbitKanban)
|
|
150
|
+
- [SheetDB](https://github.com/goofmint/sheet-db)
|
|
151
|
+
- [Text2Cal](https://github.com/goofmint/Text2Cal)
|
|
152
|
+
- [Eluma](https://github.com/goofmint/eluma.dev)
|
|
153
|
+
|
|
154
|
+
## Skills
|
|
155
|
+
|
|
156
|
+
- **Languages:** Python, JavaScript/TypeScript, Google Apps Script, Go, Java, Dart/Flutter, C#, PHP, Ruby, Swift, Kotlin, VBA
|
|
157
|
+
- **Frameworks:** React Router, Hono, Vue, Remix, Next.js, Flutter
|
|
158
|
+
- **Languages:** Python, JavaScript/TypeScript, Go, Java, Dart/Flutter, PHP, Ruby, Swift, Kotlin, VBA
|
|
159
|
+
|
|
160
|
+
## Publications (Japanese)
|
|
161
|
+
|
|
162
|
+
- *The 3Cs for Becoming Engineer-Friendly in DevRel*
|
|
163
|
+
- *Docker Expert Training Guide*
|
|
164
|
+
- *Developer Marketing DevRel Q&A*
|
|
165
|
+
- *Get Started with Online Events in One Book!*
|
|
166
|
+
- *Expanding Developer Careers Through English*
|
|
167
|
+
|
|
168
|
+
## Packages
|
|
169
|
+
|
|
170
|
+
- npm: [https://www.npmjs.com/~moongift](https://www.npmjs.com/~moongift)
|
|
171
|
+
- PyPI: [https://pypi.org/user/goofmint/](https://pypi.org/user/goofmint/)
|
|
172
|
+
- Packagist: [https://packagist.org/users/goofmint/packages/](https://packagist.org/users/goofmint/packages/)
|
|
173
|
+
- RubyGems: [https://rubygems.org/profiles/moongift](https://rubygems.org/profiles/moongift)
|
|
174
|
+
- pub.dev: [https://pub.dev/packages/hexabase](https://pub.dev/packages/hexabase)
|
|
175
|
+
|
|
176
|
+
## Contact
|
|
177
|
+
|
|
178
|
+
- Email: [atsushi@moongift.jp](mailto:atsushi@moongift.jp)
|
|
179
|
+
- X/Twitter: [@goofmint](https://twitter.com/goofmint)
|
|
180
|
+
- LinkedIn: [Atsushi Nakatsugawa](https://www.linkedin.com/in/goofmint/)
|
package/en/blog.html
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
layout: default
|
|
3
|
+
title: Blog
|
|
4
|
+
permalink: /en/blog/
|
|
5
|
+
lang: en
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
{% include i18n.html %}
|
|
9
|
+
|
|
10
|
+
<h1>{{ t.blog.title }}</h1>
|
|
11
|
+
|
|
12
|
+
<ul class="post-list">
|
|
13
|
+
{% assign en_posts = site.posts | where: "lang", "en" %}
|
|
14
|
+
{% for post in en_posts %}
|
|
15
|
+
<li class="post-item">
|
|
16
|
+
<h2><a href="{{ post.url | relative_url }}">{{ post.title }}</a></h2>
|
|
17
|
+
<p class="post-meta">{{ post.date | date: "%B %d, %Y" }}</p>
|
|
18
|
+
<p>{{ post.excerpt }}</p>
|
|
19
|
+
</li>
|
|
20
|
+
{% endfor %}
|
|
21
|
+
</ul>
|