hiroppy 1.0.55 → 1.0.57

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.
Binary file
@@ -88,11 +88,11 @@
88
88
  "main": [
89
89
  {
90
90
  "name": "Coder Penguin",
91
- "start": "2025-04-01",
91
+ "start": "2024-04-01",
92
92
  "end": null,
93
93
  "position": "Founder",
94
94
  "initialState": "0",
95
- "description": "もともと持っていた会社をメインに独立。\n合同会社Coder Penguinでは、様々な会社でフロントエンドの技術顧問やアーキテクチャ設計、開発、エンジニア採用を行う。\n最近は、LLMを利用したサービス開発も多め。",
95
+ "description": "合同会社Coder Penguinでは、多くの会社で技術顧問として様々な会社の支援を行う。\n\n- Next.js, Node.jsなどのアーキテクチャ設計\n- 大規模フロントエンドのパフォーマンスチューニング\n- LLMを利用したアプリケーション開発支援\n- エンジニア採用支援\n- エンジニア組織計画と成長戦略相談\n\n何をやったかは、My Companyセクションを参照。",
96
96
  "company": "coderPenguin",
97
97
  "links": []
98
98
  },
@@ -102,7 +102,7 @@
102
102
  "end": "2025-03-31",
103
103
  "position": "VPoE",
104
104
  "initialState": "0",
105
- "description": "[Yuicleaner](https://yuimedi.com/yuicleaner)の開発をリードし、\n[react-flow](https://reactflow.dev/)の導入と複雑なUIの作成、数百万データを高速に処理できるようにアーキテクチャの設計と実装、\n既存コードをすべて置換し、Next.jsの導入などを行った。\n\nまたVPoEとしてエンジニア組織の構築も行い、エンジニアラダーの作成し評価制度のベース作成、スケールしやすい組織構築も模索しながら行っている。",
105
+ "description": "VPoEとしてエンジニア組織の構築とフロントエンドの開発をリード。\n\n- [Yuicleaner](https://yuimedi.com/yuicleaner)の開発をリード\n- 製薬企業様向けに数千万データを高速に処理できるようにNode.jsを用いてアーキテクチャの設計と実装\n- [YuiQuery Research](https://us.yuimedi.com/product-yuiquery-research/)でLLMを使った自然言語からSQL生成システムの実装\n- エンジニア組織の構築とエンジニアラダーの作成し評価制度のベース作成",
106
106
  "links": [
107
107
  {
108
108
  "title": "Yuimediのプロダクト開発 | Notion",
@@ -146,9 +146,9 @@
146
146
  "name": "Mercari/Souzoh",
147
147
  "start": "2019-11-01",
148
148
  "end": "2022-07-31",
149
- "position": "Architect",
149
+ "position": "Enabling Team",
150
150
  "initialState": "0",
151
- "description": "技術顧問から正社員として復職し、再度入社。JPでは[Mercari Web](https://jp.mercari.com/)の0から作成するプロジェクトである[GroundUP App プロジェクト](https://engineering.mercari.com/blog/entry/20221213-ground-up-app/)に立ち上げ参加。\n\n後に100%子会社であるSouzohの立ち上げ時に出向として参加し、[Mercari Shops](https://mercari-shops.com/)リリースまでの8ヶ月間、フロントエンドの開発をほぼ一人で担当。リリース後は[Enabling TeamとしてStream-aligned team](https://engineering.mercari.com/blog/entry/20210812-team-topologies-in-souzoh/)をサポート。",
151
+ "description": "技術顧問から正社員として復職し、再度入社。\n\n- [Mercari Web](https://jp.mercari.com/)の0から作成するプロジェクトである[GroundUP App プロジェクト](https://engineering.mercari.com/blog/entry/20221213-ground-up-app/)に立ち上げ参加\n- Souzohの立ち上げを行い、[Mercari Shops](https://mercari-shops.com/)リリースまでの8ヶ月間、フロントエンドの開発をほぼ一人で担当\n- Shopsリリース後は[Enabling TeamとしてStream-aligned team](https://engineering.mercari.com/blog/entry/20210812-team-topologies-in-souzoh/)をサポート。",
152
152
  "links": [
153
153
  {
154
154
  "title": "NestJSでスケーラブルなBFFを構築。メルカリShopsエンジニアがGraphQL活用のリアルを語る【技術選定の裏側:GraphQL編 vol.2】 | IT/Webエンジニアの転職・求人サイトFindy – GitHubからスキル偏差値を算出",
@@ -193,7 +193,7 @@
193
193
  "end": "2019-10-31",
194
194
  "position": "Engineer",
195
195
  "initialState": "1-100",
196
- "description": "前のドワンゴ退職から半年しか経ってないため、特に以前と開発の状態は大きく変わらず[N予備校](\"https://www.nnn.ed.nico/\")に復職。引き続き機能開発やwssを利用したリアルタイムイベントを管理するシステムをメンテナンス。\nまた、N校のプログラミング教材のレビューも行った。\n\n後にニコニコ生放送への部署に移り、動画の低遅延、安定化の研究。WebRTCやこのときにはまだ仕様策定中であった[CMAF](https://www.liveinstantly.com/ja/resources/cross-posts/cmaf-format/)の実装調査を行った。",
196
+ "description": "前のドワンゴ退職から半年しか経ってないため、以前と開発の状態は大きく変わらず[N予備校](\"https://www.nnn.ed.nico/\")に復職。\n\n- 引き続き機能開発やwssを利用したリアルタイムイベントを管理するシステムをメンテナンス\n- N校のJavaScriptに関するプログラミング教材のレビュー\n- ニコニコ生放送の部署に移り、動画の低遅延、安定化の研究。WebRTCやこのときにはまだ仕様策定中であった[CMAF](https://www.liveinstantly.com/ja/resources/cross-posts/cmaf-format/)の導入検証を行う",
197
197
  "links": [],
198
198
  "company": "dwango"
199
199
  },
@@ -203,7 +203,7 @@
203
203
  "end": "2017-12-01",
204
204
  "position": "Engineer",
205
205
  "initialState": "1-100",
206
- "description": "[Mercari US](https://www.mercari.com/)の開発に従事し、現地にいったりし、ほぼなにもない状態のサービスを開発を行う。\n\nMercari JPではPWAReactの導入をリードし行った。",
206
+ "description": "主にUSチームでWebの開発に従事。フロントエンドエンジニア3人目。\n\n- [Mercari US](https://www.mercari.com/)の開発をリード\n- Mercari JPではAMP, PWA, Reactの導入をリード",
207
207
  "links": [],
208
208
  "company": "mercari"
209
209
  },
@@ -213,7 +213,7 @@
213
213
  "end": "2017-05-31",
214
214
  "position": "Engineer",
215
215
  "initialState": "0",
216
- "description": "新卒で入社。新規開発を行うフロンティアチームで社内レジュメシステムの開発。その後に[ニコナレ](https://blog.nicovideo.jp/niconews/115830.html)の立ち上げを行いフロントエンド一人で開発。初React導入。\n\n次に[N予備校](https://www.nnn.ed.nico/)の立ち上げを行い、主にwssを利用したリアルタイムイベントを管理するシステムを開発。",
216
+ "description": "新卒で入社し、新規開発を行うフロンティアチームに配属。\n\n- 社内レジュメシステムの開発\n- [ニコナレ](https://blog.nicovideo.jp/niconews/115830.html)の立ち上げを行いフロントエンド一人で開発。初React導入。\n- [N予備校](https://www.nnn.ed.nico/)の立ち上げを行い、主にwssを利用したリアルタイムイベントを管理するシステムを開発",
217
217
  "links": [],
218
218
  "company": "dwango"
219
219
  }
@@ -225,7 +225,7 @@
225
225
  "end": null,
226
226
  "position": "Technical Advisor",
227
227
  "initialState": "100",
228
- "description": "Ruby on RailsからNext.jsへの移行方針の提案、実装サポート。また、jQueryからReactへの移行サポート。\n\nエンジニアの育成。",
228
+ "description": "- Ruby on RailsからNext.jsへの移行方針の設計支援\n- jQueryからReactへの移行サポート\n- エンジニア採用支援\n- エンジニア育成",
229
229
  "links": [
230
230
  {
231
231
  "title": "食べログノートをリリースしました!|食べログ フロントエンドエンジニアブログ",
@@ -264,7 +264,7 @@
264
264
  "end": null,
265
265
  "position": "Technical Advisor",
266
266
  "initialState": "100",
267
- "description": "退職後引き続き、Architectとして社内のフロントエンドサポートと大規模な処理に耐えれるようにパフォーマンスチューニング。\nエンジニア採用のサポート。",
267
+ "description": "- フロントエンド、Node.jsのセキュリティ強化支援\n- 大規模トラフィックに耐えうる設計、パフォーマンスチューニング支援\n- エンジニア採用支援",
268
268
  "links": [],
269
269
  "company": "mercari"
270
270
  },
@@ -274,7 +274,7 @@
274
274
  "end": null,
275
275
  "position": "Enabling Team (Frontend/LLM)",
276
276
  "initialState": "0",
277
- "description": "Enabling Teamとして、フロントエンド開発の支援、LLMの検証等を行う。\n\nCEO直下のチームで、BPOの開発を行う。",
277
+ "description": "- CEO直下のチームで、新規プロダクトのBPO\n- バクラクのフロントエンド開発\n- 会社全体リポジトリのフロントエンドインフラ改善",
278
278
  "links": [
279
279
  {
280
280
  "title": "LayerX、AIエージェントに参入 請求書受け取り代行など - 日本経済新聞",
@@ -299,8 +299,13 @@
299
299
  "end": null,
300
300
  "position": "Engineer",
301
301
  "initialState": "100",
302
- "description": "Yuiqueryの開発を引き続き手伝う。",
303
- "links": [],
302
+ "description": "- YuiQuery Researchの開発を引き続き行う",
303
+ "links": [
304
+ {
305
+ "title": "",
306
+ "url": "https://us.yuimedi.com/product-yuiquery-research/"
307
+ }
308
+ ],
304
309
  "company": "yuimedi"
305
310
  },
306
311
  {
@@ -309,7 +314,7 @@
309
314
  "end": null,
310
315
  "position": "Technical Advisor",
311
316
  "initialState": "100",
312
- "description": "Next.jsApp Routerを利用したサービスを展開しているので、そこで発生した問題点を解決するアドバイスを行う。\n\nRuby on Railsからフロントエンドを剥がす過程の提案、リファクタリングサポート。",
317
+ "description": "- Ruby on RailsからNext.jsへの移行方針の設計支援\n- Next.js App Routerアーキテクチャ設計支援\n- 新規プロダクト設計支援\n- フロントエンドインフラ改善支援 (Monorepo, CI/CD, Bundler, etc)\n- エンジニア採用支援\n- エンジニア育成",
313
318
  "links": [
314
319
  {
315
320
  "title": "株式会社Rebaseの技術顧問に廣戸裕大(Hiroppy)氏が就任[Rebase] | NIKKEI COMPASS - 日本経済新聞",
@@ -339,7 +344,7 @@
339
344
  "end": null,
340
345
  "position": "Technical Advisor",
341
346
  "initialState": "1-100",
342
- "description": "コミューンの設計、デザインシステム作成支援。\nLLM効率化のための基盤作成支援。",
347
+ "description": "- Node.jsアーキテクチャ設計支援 (DDD, Clean Architecture)\n- 大規模トラフィックに耐えうる設計、パフォーマンスチューニング支援\n- フロントエンドインフラ改善支援 (Monorepo, CI/CD, Bundler, etc)\n- リプレイス移行設計支援\n- LLM効率化のための基盤作成支援\n- エンジニア採用支援",
343
348
  "links": [],
344
349
  "company": "commune"
345
350
  },
@@ -349,7 +354,7 @@
349
354
  "end": null,
350
355
  "position": "Technical Advisor",
351
356
  "initialState": "0",
352
- "description": "フロントエンド、Node.js、パフォーマンス支援",
357
+ "description": "- Next.js App Routerアーキテクチャ設計支援\n- Node.jsアーキテクチャ設計支援 (DDD, Clean Architecture)\n- LLM効率化のための基盤作成支援\n- フロントエンドインフラ改善支援 (Monorepo, CI/CD, Bundler, etc)\n- エンジニア採用支援",
353
358
  "links": [
354
359
  {
355
360
  "title": "STRACT、エンジニア向けイベント「カンファレンス直前!TypeScript実践Tips」初開催決定!",
@@ -374,7 +379,7 @@
374
379
  "end": null,
375
380
  "position": "Technical Advisor",
376
381
  "initialState": "0",
377
- "description": "フロントエンド、Node.js、パフォーマンス支援",
382
+ "description": "- リプレイス移行設計支援\n- LLM効率化のための基盤作成支援\n- フロントエンドインフラ改善支援 (Monorepo, CI/CD, Bundler, etc)",
378
383
  "links": [],
379
384
  "company": "hokuto"
380
385
  },
@@ -384,7 +389,7 @@
384
389
  "end": null,
385
390
  "position": "Technical Advisor",
386
391
  "initialState": "1-100",
387
- "description": "ADRの各意思決定の確認や議論、今後スケールする組織のためのアーキテクチャの提案。",
392
+ "description": "- ADRの各意思決定の確認や議論、今後スケールする組織のためのアーキテクチャの提案\n- フロントエンドインフラ改善支援 (Monorepo, CI/CD, Bundler, etc)\n- 新規プロダクト設計支援",
388
393
  "links": [
389
394
  {
390
395
  "title": "2023年の振り返り",
@@ -419,7 +424,7 @@
419
424
  "end": null,
420
425
  "position": "Technical Advisor",
421
426
  "initialState": "0",
422
- "description": "フロントエンド、Node.js、パフォーマンス支援",
427
+ "description": "- フロントエンドインフラ改善支援 (Monorepo, CI/CD, Bundler, etc)\n- 新規プロダクト設計支援",
423
428
  "links": [],
424
429
  "company": "ship"
425
430
  },
@@ -429,7 +434,7 @@
429
434
  "end": null,
430
435
  "position": "Technical Advisor",
431
436
  "initialState": "0",
432
- "description": "App Routerを利用したtoBサービスの開発、サポート。",
437
+ "description": "- App Routerを利用したtoBサービスの開発、サポート",
433
438
  "links": [],
434
439
  "company": "runpeace"
435
440
  },
@@ -439,7 +444,7 @@
439
444
  "end": "2024-12-31",
440
445
  "position": "Architect",
441
446
  "initialState": "0",
442
- "description": "サービスのリプレイスでの設計構築、App Routerの導入支援。",
447
+ "description": "- Next.js App Routerアーキテクチャ設計支援\n- Node.jsアーキテクチャ設計支援 (DDD, Clean Architecture)\n- フロントエンドインフラ改善支援 (Monorepo, CI/CD, Bundler, etc)\n- リプレイス移行設計支援",
443
448
  "links": [],
444
449
  "company": "aidemy"
445
450
  },
@@ -449,7 +454,7 @@
449
454
  "end": "2024-08-31",
450
455
  "position": "Technical Advisor",
451
456
  "initialState": "100",
452
- "description": "フロントエンド改善支援",
457
+ "description": "- Next.js App Routerアーキテクチャ設計支援\n- Node.jsアーキテクチャ設計支援 (DDD, Clean Architecture)\n- フロントエンドインフラ改善支援 (Monorepo, CI/CD, Bundler, etc)\n- リプレイス移行設計支援",
453
458
  "links": [
454
459
  {
455
460
  "title": "Next.js App Router / React Server Components(RSC)を紐解いてみた - estie inside blog",
@@ -467,7 +472,7 @@
467
472
  "end": "2023-12-31",
468
473
  "position": "Technical Advisor",
469
474
  "initialState": "1-100",
470
- "description": "CTOへの技術、組織的な改善提案。DDDからの脱却するため、リファクタリングへのテストの追加と安定性のサポート。",
475
+ "description": "- Next.js App Routerアーキテクチャ設計支援\n- Node.jsアーキテクチャ設計支援 (DDD, Clean Architecture)\n- フロントエンドインフラ改善支援 (Monorepo, CI/CD, Bundler, etc)\n- リプレイス移行設計支援",
471
476
  "links": [],
472
477
  "company": "anotherworks"
473
478
  },
@@ -477,7 +482,7 @@
477
482
  "end": "2022-06-01",
478
483
  "position": "Engineer",
479
484
  "initialState": "1-100",
480
- "description": "[Yuicleaner](https://yuimedi.com/yuicleaner)の実装。",
485
+ "description": "- [Yuicleaner](https://yuimedi.com/yuicleaner)の実装",
481
486
  "links": [],
482
487
  "company": "yuimedi"
483
488
  },
@@ -487,7 +492,7 @@
487
492
  "end": "2022-05-31",
488
493
  "position": "Technical Advisor",
489
494
  "initialState": "1-100",
490
- "description": "コードが複雑になっていたため、リファクタリングの提案。事業転換が発生したため、短い期間でのサポートとなった。\n\nエンジニアの育成。",
495
+ "description": "- Node.jsアーキテクチャ設計支援 (DDD, Clean Architecture)\n- エンジニア育成\n\n事業転換が発生したため、短い期間でのサポート",
491
496
  "links": [],
492
497
  "company": "alpaca"
493
498
  },
@@ -497,7 +502,7 @@
497
502
  "end": "2020-05-31",
498
503
  "position": "Technical Advisor",
499
504
  "initialState": "1-100",
500
- "description": "create-react-appからNext.jsへの移行サポート。ゲーム開発のコードレビューとパフォーマンス改善提案。",
505
+ "description": "- create-react-appからNext.jsへの移行サポート\n- ゲーム開発のコードレビューとパフォーマンス改善提案",
501
506
  "links": [],
502
507
  "company": "black"
503
508
  },
@@ -507,7 +512,7 @@
507
512
  "end": "2019-10-31",
508
513
  "position": "Technical Advisor",
509
514
  "initialState": "0",
510
- "description": "アイルランドからのリモートワークで、Mercari JPを1から作り直すプロジェクトに顧問として参加。\n\nNext.jsを初期から選択し、セキュリティをはじめとしたアーキテクチャの設計と実装をサポート。",
515
+ "description": "- Mercari JPを1から作り直すプロジェクトに顧問として参加\n- Next.jsを初期から選択し、セキュリティをはじめとしたアーキテクチャの設計と実装をサポート\n- 大規模トラフィックに耐えうる設計、パフォーマンスチューニング支援\n- リプレイス移行設計支援",
511
516
  "links": [
512
517
  {
513
518
  "title": "Web Re-Architecture プロジェクトにおける技術的チャレンジ",
@@ -525,7 +530,7 @@
525
530
  "end": "2017-10-01",
526
531
  "position": "Engineer",
527
532
  "initialState": "100",
528
- "description": "スポットで開発に参加、Scalaを利用。",
533
+ "description": "- スポットで開発に参加、Scalaを利用",
529
534
  "links": [],
530
535
  "company": "bizreach"
531
536
  },
@@ -535,7 +540,7 @@
535
540
  "end": "2015-03-03",
536
541
  "position": "Engineer",
537
542
  "initialState": "100",
538
- "description": "Backbone.jsやjQueryを利用し、学生アルバイトとして開発。",
543
+ "description": "- Backbone.jsやjQueryを利用し、学生アルバイトとして開発",
539
544
  "links": [],
540
545
  "company": "eyesjapan"
541
546
  },
@@ -545,7 +550,7 @@
545
550
  "end": "2013-10-01",
546
551
  "position": "Intern",
547
552
  "initialState": "0",
548
- "description": "Titaniumを利用した画像処理アプリ開発。",
553
+ "description": "- Titaniumを利用した画像処理アプリ開発",
549
554
  "links": [],
550
555
  "company": "cyberagent"
551
556
  }
@@ -14,10 +14,10 @@
14
14
  "linkedin": "https://www.linkedin.com/in/hiroppy/",
15
15
  "connpass": "https://connpass.com/user/about_hiroppy/"
16
16
  },
17
- "profile": "Node.js を中心に JavaScript をよく使うエンジニア。\n2018年からカカクコムやメルカリなどの企業で技術顧問を勤め、開発支援・技術選定・エンジニア採用をサポートしている。\n本業では、N予備校、メルカリJP、メルカリUS、メルカリShops などをゼロから立ち上げており、大規模トラフィックを扱うサービスの全体設計が得意。\n大学では画像処理を専攻し、ドワンゴ在籍時にはニコニコ生放送の遅延最適化に関する研究に従事。\nコミュニティ活動では TSKaigi のプロポーザル審査委員や JSConf JP の運営を担い、Node.js、webpack など OSS のメンテナンスもしていた。",
17
+ "profile": "2008年からプログラミングをはじめ、今は Node.js を中心に JavaScript をよく使うエンジニア。\n2018年からカカクコムやメルカリなどの企業で技術顧問を勤め、20社以上で開発支援・技術選定・エンジニア採用をサポートしている。\n独立前は、ニコナレ、N予備校、メルカリJP、メルカリUS、メルカリShops などをゼロから立ち上げており、大規模トラフィックを扱うサービスの全体設計が得意。\n大学では画像処理を専攻し、ドワンゴ在籍時にはニコニコ生放送の遅延最適化に関する研究に従事。\nコミュニティ活動では JSConf JP の運営やTSKaigi のプロポーザル審査委員をしたり、昔は Node.js、webpack などの OSS のメンテナンスもしていた。",
18
18
  "community": {
19
19
  "jsconfJp": {
20
- "position": "JSConf JP コアメンバー",
20
+ "position": "JSConf JP メンバー",
21
21
  "start": "2021",
22
22
  "end": null,
23
23
  "links": [
@@ -61,7 +61,7 @@
61
61
  ]
62
62
  },
63
63
  "nodeFest": {
64
- "position": "東京Node学園祭 コアメンバー",
64
+ "position": "東京Node学園祭 メンバー",
65
65
  "start": "2016",
66
66
  "end": "2018",
67
67
  "links": [
@@ -86,7 +86,7 @@
86
86
  ]
87
87
  },
88
88
  "reactjs": {
89
- "position": "React.js meetup コアメンバー",
89
+ "position": "React.js meetup メンバー",
90
90
  "start": "2017",
91
91
  "end": "2019",
92
92
  "links": [
@@ -1,10 +1,28 @@
1
1
  [
2
+ {
3
+ "title": "ep190 Monthly Ecosystem 202511 | mozaic.fm",
4
+ "description": "第 190 回のテーマは 2025 年 11 月の Monthly Ecosystem です。",
5
+ "image": "/images/bW96YWljLmZtL2Fzc2V0cy9pbWcvbW96YWljLjYwMHg2MDAucG5n.webp",
6
+ "name": "mozaic.fm",
7
+ "url": "https://mozaic.fm/episodes/190/monthly-ecosystem-202511.html",
8
+ "publishedAt": "2025-11-22",
9
+ "links": []
10
+ },
11
+ {
12
+ "title": "ep187 Monthly Ecosystem 202510 | mozaic.fm",
13
+ "description": "第 187 回のテーマは 2025 年 10 月の Monthly Ecosystem です。",
14
+ "image": "/images/bW96YWljLmZtL2Fzc2V0cy9pbWcvbW96YWljLjYwMHg2MDAucG5n.webp",
15
+ "name": "mozaic.fm",
16
+ "url": "https://mozaic.fm/episodes/187/monthly-ecosystem-202510.html",
17
+ "publishedAt": "2025-10-15",
18
+ "links": []
19
+ },
2
20
  {
3
21
  "title": "ep183 Monthly Ecosystem 202508 | mozaic.fm",
4
22
  "description": "第 183 回のテーマは 2025 年 8 月の Monthly Ecosystem です。",
5
23
  "image": "/images/bW96YWljLmZtL2Fzc2V0cy9pbWcvbW96YWljLjYwMHg2MDAucG5n.webp",
6
24
  "name": "mozaic.fm",
7
- "url": "https://mozaic.fm/episodes/183/monthly-ecosystem-2025.html",
25
+ "url": "https://mozaic.fm/episodes/183/monthly-ecosystem-202508.html",
8
26
  "publishedAt": "2025-08-16",
9
27
  "links": []
10
28
  },
@@ -0,0 +1,16 @@
1
+ /* eslint-disable */
2
+ /**
3
+ * This file was automatically generated by json-schema-to-typescript.
4
+ * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,
5
+ * and run json-schema-to-typescript to regenerate this file.
6
+ */
7
+
8
+ export interface Article {
9
+ name: "技術探し";
10
+ hot: boolean;
11
+ url: string;
12
+ title: string;
13
+ image: string;
14
+ description: "";
15
+ publishedAt: string;
16
+ }
@@ -0,0 +1,30 @@
1
+
2
+ /**
3
+ * Metadata for a web link
4
+ */
5
+ export interface LinkMeta {
6
+ /**
7
+ * Page title
8
+ */
9
+ title?: string;
10
+ /**
11
+ * Page description
12
+ */
13
+ description?: string;
14
+ /**
15
+ * Page image (WebP format, base64 encoded path)
16
+ */
17
+ image?: string;
18
+ /**
19
+ * Site or platform name
20
+ */
21
+ name?: string;
22
+ /**
23
+ * Page URL
24
+ */
25
+ url?: string;
26
+ /**
27
+ * Error message if crawling failed
28
+ */
29
+ error?: string;
30
+ }
@@ -0,0 +1,10 @@
1
+
2
+ export * from './common.js';
3
+ export * from './articles.js';
4
+ export * from './jobs.js';
5
+ export * from './media.js';
6
+ export * from './meta.js';
7
+ export * from './podcasts.js';
8
+ export * from './repos.js';
9
+ export * from './sponsors.js';
10
+ export * from './talks.js';
@@ -0,0 +1,117 @@
1
+ /* eslint-disable */
2
+ import type { LinkMeta } from "./common.js";
3
+
4
+ /**
5
+ * This file was automatically generated by json-schema-to-typescript.
6
+ * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,
7
+ * and run json-schema-to-typescript to regenerate this file.
8
+ */
9
+
10
+ export interface Jobs {
11
+ meta: {
12
+ coderPenguin: {
13
+ image: string;
14
+ url: string;
15
+ };
16
+ layerX: {
17
+ image: string;
18
+ url: string;
19
+ };
20
+ ship: {
21
+ image: string;
22
+ url: string;
23
+ };
24
+ stract: {
25
+ image: string;
26
+ url: string;
27
+ };
28
+ commune: {
29
+ image: string;
30
+ url: string;
31
+ };
32
+ hokuto: {
33
+ image: string;
34
+ url: string;
35
+ };
36
+ aidemy: {
37
+ image: string;
38
+ url: string;
39
+ };
40
+ mercari: {
41
+ image: string;
42
+ url: string;
43
+ };
44
+ yuimedi: {
45
+ image: string;
46
+ url: string;
47
+ };
48
+ dwango: {
49
+ image: string;
50
+ url: string;
51
+ };
52
+ estie: {
53
+ image: string;
54
+ url: string;
55
+ };
56
+ runpeace: {
57
+ image: string;
58
+ url: string;
59
+ };
60
+ rebase: {
61
+ image: string;
62
+ url: string;
63
+ };
64
+ route06: {
65
+ image: string;
66
+ url: string;
67
+ };
68
+ anotherworks: {
69
+ image: string;
70
+ url: string;
71
+ };
72
+ alpaca: {
73
+ image: string;
74
+ url: string;
75
+ };
76
+ black: {
77
+ image: string;
78
+ url: string;
79
+ };
80
+ kakakucom: {
81
+ image: string;
82
+ url: string;
83
+ };
84
+ bizreach: {
85
+ image: string;
86
+ url: string;
87
+ };
88
+ eyesjapan: {
89
+ image: string;
90
+ url: string;
91
+ };
92
+ cyberagent: {
93
+ image: string;
94
+ url: string;
95
+ };
96
+ };
97
+ main: {
98
+ name: string;
99
+ start: string;
100
+ end?: string | null;
101
+ position: string;
102
+ initialState: string;
103
+ description: string;
104
+ company: string;
105
+ links?: LinkMeta[];
106
+ }[];
107
+ side: {
108
+ name: string;
109
+ start: string;
110
+ end?: string | null;
111
+ position: string;
112
+ initialState: string;
113
+ description: string;
114
+ links?: LinkMeta[];
115
+ company: string;
116
+ }[];
117
+ }
@@ -0,0 +1,28 @@
1
+ /* eslint-disable */
2
+ import type { LinkMeta } from "./common.js";
3
+
4
+ /**
5
+ * This file was automatically generated by json-schema-to-typescript.
6
+ * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,
7
+ * and run json-schema-to-typescript to regenerate this file.
8
+ */
9
+
10
+ export interface Media {
11
+ title: string;
12
+ description: string;
13
+ image: string;
14
+ name?:
15
+ | "プレスリリース・ニュースリリース配信シェアNo.1|PR TIMES"
16
+ | "estie inside blog"
17
+ | "ROUTE06 Tech Blog"
18
+ | "株式会社ROUTE06 (ルートシックス) - ビジネスモデル変革を支援するDXパートナー"
19
+ | "TSKaigi 公式ブログ"
20
+ | "Findy Engineer Lab"
21
+ | "yuimedi on Notion"
22
+ | "note(ノート)"
23
+ | "mercan (メルカン)"
24
+ | "NextPublishing デジタルファースト宣言!";
25
+ url: string;
26
+ publishedAt: string;
27
+ links?: LinkMeta[];
28
+ }
@@ -0,0 +1,89 @@
1
+ /* eslint-disable */
2
+ import type { LinkMeta } from "./common.js";
3
+
4
+ /**
5
+ * This file was automatically generated by json-schema-to-typescript.
6
+ * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,
7
+ * and run json-schema-to-typescript to regenerate this file.
8
+ */
9
+
10
+ export interface Meta {
11
+ site: {
12
+ personal: string;
13
+ company: string;
14
+ resume: string;
15
+ blog: string;
16
+ hatenablog: string;
17
+ podcast: string;
18
+ };
19
+ sns: {
20
+ github: string;
21
+ twitter: string;
22
+ facebook: string;
23
+ linkedin: string;
24
+ connpass: string;
25
+ };
26
+ profile: "2008年からプログラミングをはじめ、今は Node.js を中心に JavaScript をよく使うエンジニア。\n2018年からカカクコムやメルカリなどの企業で技術顧問を勤め、20社以上で開発支援・技術選定・エンジニア採用をサポートしている。\n独立前は、ニコナレ、N予備校、メルカリJP、メルカリUS、メルカリShops などをゼロから立ち上げており、大規模トラフィックを扱うサービスの全体設計が得意。\n大学では画像処理を専攻し、ドワンゴ在籍時にはニコニコ生放送の遅延最適化に関する研究に従事。\nコミュニティ活動では JSConf JP の運営やTSKaigi のプロポーザル審査委員をしたり、昔は Node.js、webpack などの OSS のメンテナンスもしていた。";
27
+ community: {
28
+ jsconfJp: {
29
+ position: string;
30
+ start: string;
31
+ end?: null;
32
+ links: {
33
+ title: string;
34
+ description: string;
35
+ image: string;
36
+ url: string;
37
+ }[];
38
+ };
39
+ tsKaigi: {
40
+ position: string;
41
+ start: string;
42
+ end?: null;
43
+ links: {
44
+ title: string;
45
+ description: string;
46
+ image: string;
47
+ url: string;
48
+ }[];
49
+ };
50
+ nodeFest: {
51
+ position: string;
52
+ start: string;
53
+ end: string;
54
+ links: {
55
+ title: string;
56
+ description: string;
57
+ image: string;
58
+ url: string;
59
+ }[];
60
+ };
61
+ reactjs: {
62
+ position: string;
63
+ start: string;
64
+ end: string;
65
+ links: {
66
+ title: string;
67
+ description: string;
68
+ image: string;
69
+ name: string;
70
+ url: string;
71
+ }[];
72
+ };
73
+ techfeed: {
74
+ position: string;
75
+ start: string;
76
+ end?: null;
77
+ links: {
78
+ title: string;
79
+ description: string;
80
+ image: string;
81
+ name: string;
82
+ url: string;
83
+ }[];
84
+ };
85
+ };
86
+ form: {
87
+ request: string;
88
+ };
89
+ }
@@ -0,0 +1,24 @@
1
+ /* eslint-disable */
2
+ import type { LinkMeta } from "./common.js";
3
+
4
+ /**
5
+ * This file was automatically generated by json-schema-to-typescript.
6
+ * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,
7
+ * and run json-schema-to-typescript to regenerate this file.
8
+ */
9
+
10
+ export interface Podcast {
11
+ title: string;
12
+ description: string;
13
+ image:
14
+ | "/images/bW96YWljLmZtL2Fzc2V0cy9pbWcvbW96YWljLjYwMHg2MDAucG5n.webp"
15
+ | "/images/dm9zLmxpbmUtc2Nkbi5uZXQvcG9kY2FzdC9vcGVuZ3JhcGhzL2VwaXNvZGUxMDAucG5n.webp"
16
+ | "/images/aS5zY2RuLmNvL2ltYWdlL2FiNjc2NTYzMDAwMGJhOGE2MzY3OTRiMzA5ZmMwODRhZTI3NmFmNmM=.webp"
17
+ | "/images/aS55dGltZy5jb20vdmkvWU5MdklrcVJDLWcvaHFkZWZhdWx0LmpwZw==.webp"
18
+ | "/images/dm9zLmxpbmUtc2Nkbi5uZXQvcG9kY2FzdC9vcGVuZ3JhcGhzL2VwaXNvZGUwOTMucG5n.webp"
19
+ | "/images/dm9zLmxpbmUtc2Nkbi5uZXQvbGFuZHByZXNzLWNvbnRlbnQtdjJfMTc2MS8xNjY2ODU0MTIwMjA0LnBuZz91cGRhdG.webp";
20
+ name: "mozaic.fm" | "UIT INSIDE" | "Spotify" | "YouTube" | "LINE ENGINEERING";
21
+ url: string;
22
+ publishedAt: string;
23
+ links?: LinkMeta[];
24
+ }
@@ -0,0 +1,34 @@
1
+ /* eslint-disable */
2
+ /**
3
+ * This file was automatically generated by json-schema-to-typescript.
4
+ * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,
5
+ * and run json-schema-to-typescript to regenerate this file.
6
+ */
7
+
8
+ export interface Repos {
9
+ hot: {
10
+ name: string;
11
+ url: string;
12
+ description: string;
13
+ language: string;
14
+ image: string;
15
+ }[];
16
+ active: {
17
+ name: string;
18
+ url: string;
19
+ description: string;
20
+ language: string;
21
+ image: string;
22
+ org: string;
23
+ repo: string;
24
+ }[];
25
+ maintaining: {
26
+ name: string;
27
+ url: string;
28
+ description: string;
29
+ language: string;
30
+ image: string;
31
+ org: string;
32
+ repo: string;
33
+ }[];
34
+ }
@@ -0,0 +1,19 @@
1
+ /* eslint-disable */
2
+ /**
3
+ * This file was automatically generated by json-schema-to-typescript.
4
+ * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,
5
+ * and run json-schema-to-typescript to regenerate this file.
6
+ */
7
+
8
+ export interface Sponsors {
9
+ current: {
10
+ href: string;
11
+ avatar: string;
12
+ name: string;
13
+ }[];
14
+ past: {
15
+ href: string;
16
+ avatar: string;
17
+ name: string;
18
+ }[];
19
+ }
@@ -0,0 +1,28 @@
1
+ /* eslint-disable */
2
+ import type { LinkMeta } from "./common.js";
3
+
4
+ /**
5
+ * This file was automatically generated by json-schema-to-typescript.
6
+ * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,
7
+ * and run json-schema-to-typescript to regenerate this file.
8
+ */
9
+
10
+ export interface Talk {
11
+ title: string;
12
+ description?: string;
13
+ image?: string;
14
+ name:
15
+ | "Google Docs"
16
+ | "connpass"
17
+ | "プレスリリース・ニュースリリース配信シェアNo.1|PR TIMES"
18
+ | "YouTube"
19
+ | "hiroppy's slides"
20
+ | "LINE ENGINEERING"
21
+ | "abouthiroppy's slides"
22
+ | "情報科学若手の会"
23
+ | "Speaker Deck"
24
+ | "SlideShare";
25
+ url: string;
26
+ publishedAt: string;
27
+ links?: LinkMeta[];
28
+ }
package/package.json CHANGED
@@ -1,14 +1,21 @@
1
1
  {
2
2
  "name": "hiroppy",
3
- "version": "1.0.55",
4
- "packageManager": "pnpm@10.23.0",
3
+ "version": "1.0.57",
4
+ "packageManager": "pnpm@10.24.0",
5
5
  "type": "module",
6
+ "types": "./generated/types/index.d.ts",
6
7
  "exports": {
7
8
  "./data/*": {
8
9
  "require": "./generated/*.json",
9
10
  "import": "./generated/*.json",
10
11
  "default": "./generated/*.json"
11
12
  },
13
+ "./types": {
14
+ "types": "./generated/types/index.d.ts"
15
+ },
16
+ "./types/*": {
17
+ "types": "./generated/types/*.d.ts"
18
+ },
12
19
  "./images/*": {
13
20
  "require": "./generated/images/*",
14
21
  "import": "./generated/images/*",
@@ -46,14 +53,16 @@
46
53
  },
47
54
  "homepage": "https://github.com/hiroppy/hiroppy#readme",
48
55
  "devDependencies": {
49
- "@biomejs/biome": "2.3.7",
56
+ "@biomejs/biome": "2.3.8",
50
57
  "@types/emoji-js": "3.5.2",
58
+ "@types/json-schema": "7.0.15",
51
59
  "@types/node": "24.10.1",
52
60
  "cheerio": "1.1.2",
53
61
  "emoji-js": "3.9.0",
54
- "lefthook": "2.0.4",
62
+ "json-schema-to-typescript": "15.0.4",
63
+ "lefthook": "2.0.7",
55
64
  "octokit": "5.0.5",
56
- "prettier": "3.7.0",
65
+ "prettier": "3.7.4",
57
66
  "sharp": "0.34.5",
58
67
  "typescript": "5.9.3"
59
68
  }