Skip to content

kwnt-dev/pinposiplus_frontend

Repository files navigation

ピンポジ+

ピンポジ+(ピンポジプラス)は紙・FAX運用と属人化が課題となっているゴルフ場のピン位置決定業務を、 配置ルールに基づく自動提案・PDF出力・メール送信で一貫してデジタル化する業務用Webアプリケーションです。


開発経緯

私は現在ゴルフ場でコース管理の仕事をしています。コース管理とは、ゴルフプレーヤーが快適にプレーできる環境を維持する仕事です。具体的には芝刈り、散水、施肥、剪定など多岐にわたります。その中にピン位置決定という業務があります。

ピン位置を決めるには、外周から4ヤード以上離す、過去2日間の位置から7ヤード以上離す、急傾斜や芝の傷みを避ける、9ホール全体のバランスを取る——といった複数のルールを頭の中で同時に処理する必要があります。

日々この業務をやりながら、「これってプログラムにやらせた方が正確で速いんじゃないか」「この時間を他の作業に回せるんじゃないか」と感じていました。

さらに現場では以下の課題も抱えていました。

  • 判断基準が人によってバラバラ(属人化)
  • 手書き → 清書 → FAX → 印刷という非効率なフロー(紙媒体)
  • ピンの履歴や雨天禁止エリアなどの紙データが散在しており、一度に参照できない(データ散在)
  • 芝の傷み箇所の認識が上司とスタッフ間で共有できていない(情報共有不足)

既存のツールも調べましたが、海外製で日本の現場には合わないものばかり。「無いなら自分で作ろう」と思い、独学でこのアプリの開発を始めました。

コース管理という仕事

主な業務

ゴルフ場のコース管理は、芝刈り・散水・施肥・カップ切り・バンカー均し・配管工事など多岐にわたる。 パッティンググリーンはコースの中で最も重要なエリアであり、その日のカップ位置(ピン位置)を毎朝決定する業務がある。

ピン位置決定の難しさ

ピン位置を決めるには、複数のルールを同時に満たす必要がある。

  • 外周から4yd以上離す
  • 過去2日間のピン位置から7yd以上離す
  • 急傾斜エリアを避ける
  • 芝が傷んでいる箇所を避ける
  • 9ホール全体で上段・中段・下段、左・中央・右のバランスを取る

これらを毎朝、頭の中で同時に処理しながら決めている。最終判断は人が行うべきだが、そこに至るまでの工程はプログラムの方が精度が高い。

現場の課題

課題 内容
属人化 人によって判断ロジックがバラバラ
紙媒体 手書き → 清書 → FAXという運用
データ散在 過去ピン・禁止エリア等がまとまっていない
情報共有不足 傷み箇所の認識が上司とスタッフ間で共有できていない

勤務していたゴルフ場の平均年齢は50歳(上は75歳)。30代は自分一人だった。人手不足・高齢化が進む中、少ない人数でよりよい運用ができるようにしたいと考え、このアプリを開発した。


このアプリが解決すること

  • 属人化 → ルールをシステム化し、誰でも同じ判断ができる
  • 紙媒体 → 手書き・FAXを廃止し、デジタルで完結
  • データ散在 → 過去ピン・禁止エリア・傷み情報を一元管理

業務フロー

利用者とデバイス

利用者 デバイス 利用場所
管理者(グリーンキーパー) PC コース管理事務所
作業スタッフ タブレット 現場(グリーン上)
マスター室 PC マスター室

従来のフロー

  1. グリーン上でピン位置をメモ
  2. 事務所に帰って本番用紙に清書
  3. 上司が確認・紙の切り貼りによる修正
  4. FAXでマスター室へ送信
  5. マスター室の人が印刷
  6. プレイヤーやキャディーに配布

アプリ導入後のフロー

  1. 管理者が事務所のPCでピン位置を自動提案 → 確認・調整 → スタッフに公開
  2. スタッフがタブレットで確認・グリーンの状態に応じて微調整 → 管理者に完了報告
  3. 管理者が最終確認、再調整 → マスター室に自動メール送信
  4. マスター室の人がPDFで確認、印刷
  5. プレイヤーやキャディーに配布

入力から共有まで同一データで行い、再入力・伝達作業を削減する。

業務フロー


画面遷移図

画面遷移図


主な機能

ピン位置自動提案

自動提案動画

条件(雨天・難易度)を設定し、18ホール分のピン位置を一括自動提案。提案後は個別に手動調整が可能。

セル編集(傷み・禁止・雨天エリア)

セル編集動画

グリーン上のセルをタップして傷みエリア・禁止エリア・雨天禁止エリアを登録。自動提案時にこれらのエリアを回避する。

PDF出力・送信

PDF生成動画

ピン位置をPDFで確認し、マスター室にPDFを添付して自動メール送信。

スタッフ画面(タブレット)

スタッフ画面

スタッフはタブレットを使い、グリーン上でピン位置(管理者が自動提案したもの)を確認、修正。ホールごとのピン位置調整と管理者に完了報告が可能。

ダークモード

ダークモード動画

季節や大会などで早朝4時頃から暗い中作業する場合があるのでダークモード対応。


技術スタック

カテゴリ 技術
フロントエンド Next.js 15 / TypeScript / React 19
バックエンド Laravel 12 / PHP 8.4
UI Tailwind CSS v4 / shadcn/ui
グリーン描画 react-konva
データベース MySQL 8.0(AWS RDS)
認証 Laravel Sanctum
ストレージ Amazon S3
メール Amazon SES
テスト PHPUnit / Vitest
インフラ AWS EC2 / Cloudflare
IaC Terraform
環境構築 Docker
CI/CD GitHub Actions
PDF生成 @react-pdf/renderer

ライブラリ選定理由

react-konva

グリーン形状・セル・制限エリアなどをレイヤーとして重ねて描画する必要があり、DOM/SVGよりもパフォーマンスと制御性に優れるCanvasベースのライブラリとして採用。

clipper-lib

グリーン外周からの距離制限や禁止エリア生成において、ポリゴンのオフセット処理が必要となるため採用。

@react-pdf/renderer

既存の紙フォーマットを再現する必要があり、Reactコンポーネントベースでレイアウトを構築できる点を評価して採用。


アーキテクチャ図

アーキテクチャ図


ER図

ER図


こだわったポイント

シームレスな二画面構成

画面遷移なしで操作が完結する二画面構成を採用。コース全体を俯瞰しながらピン位置を検討できる、紙運用に近い操作感を実現。

測量データに依存しない傾斜表現

精密な測量データに依存せず、傾斜情報を現場の作業者が手動入力できる設計とし、定期的な測量が必要となる導入障壁を解消。

情報の性質に応じた表現の使い分け

広範囲の情報は曲線、局所的な情報はセルで表現するなど、情報の性質に応じて描画方法を使い分け、レイヤー重畳時の視認性を確保。

2段階の自動提案アルゴリズム

複数条件(過去の配置履歴・芝の傷み・傾斜など)で候補を絞る第1段階と、コース全体のバランス(難易度配分・奥行き分散)を考慮する第2段階に分けて実装。

OSSへの貢献

開発中に使用した外部ライブラリ(clipper-lib)の型定義不足を発見し、TypeScript型定義の公開リポジトリ「DefinitelyTyped」へPull Requestを提出し、マージされました。


今後の展望

直近で実装予定

  • PDFフォーマット複数対応(ゴルフ場ごとの差分吸収)
  • キャディー携行用ポケットサイズ印刷フォーマット作成(現場での携帯性・視認性を考慮したレイアウト最適化)
  • ピン・セル入力画面のズーム機能(操作性向上)
  • 難易度パラメータ調整機能(既存ロジックの調整機能)

将来的な拡張

  • 複数ゴルフ場対応(コースごとの設定切り替え)
  • 9ホール / 27ホール / 36ホール対応(ホール構成の可変化)
  • ツーグリーン対応(1ホール2グリーンの切り替え管理)
  • 練習場パッティンググリーン対応

補足

  • MVP版は勤務しているゴルフ場の実際のマップを使用して作成した。セキュリティのため本リポジトリに含まれるマップデータはすべて架空のサンプルデータである。
  • 本アプリは現場での運用を想定して開発しましたが、導入を上司に相談した結果、現在勤務している会社はゴルフ場からコース管理を受託している立場であり、本アプリを導入するには施主(ゴルフ場)側との契約上の問題があるため、導入は難しく断念しました。現在は、紙の出力や送信機能を除き、ピン位置決定に関する機能に特化した形で再設計し、開発を進めています。

作者

Natsu

福岡在住 / Web系エンジニアを目指して転職活動中

項目 内容
学習期間 約9ヶ月(2025年7月〜現在)
総学習時間 約1,000時間以上 (内アプリ開発約400時間)              
学習形態 独学
前職 ゴルフ場コース管理(約2年)

業務中に「この作業、プログラムにやらせた方が効率がいい」と感じていた。「無いんだったら自分で作ろう!」と思い独学でアプリ開発を始めた。大学卒業後はものづくりから離れていたが、開発を進める中で、子どもの頃から感じていたものづくりへの没頭感を再び味わった。課題を見つけ、構造化し、解決策を考え、すぐに形にできる——このサイクルに強く惹かれた。このワクワクを仕事にしたいと思い、エンジニアへの転職を決意。現在はWeb系エンジニアを目指し転職活動中。

About

ピンポジ+  ゴルフコース管理支援アプリケーション。ピン位置決定業務の属人化・紙媒体・データ散在を解決し、記録・共有・検索を効率化します。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors