メインコンテンツにスキップ

Properties ↔ YAML Converter

Spring Bootのapplication.propertiesapplication.ymlファイルを相互変換するツールです。設定ファイルのマイグレーションとリファクタリングに必須!

📄 Properties → YAML

Output will appear here...

💡 Spring Boot Configuration Tips

Properties 장점:
  • 간단하고 직관적
  • 한 줄에 하나의 설정
  • 검색하기 쉬움
YAML 장점:
  • 계층 구조가 명확
  • 중복 줄임
  • 가독성 좋음
주의사항:
  • YAML은 들여쓰기에 민감 (스페이스만 사용)
  • Properties는 특수문자 이스케이프 필요
  • Profile별 파일 분리 권장

Properties vs YAML

Properties形式

spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=secret
server.port=8080

YAML形式

spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb
username: root
password: secret
server:
port: 8080

いつ使うの?

Properties → YAML変換

  • プロジェクトをYAMLに移行する時
  • 階層構造を明確に見たい時
  • 重複プレフィックスを削減したい時
  • 可読性を向上させたい時

YAML → Properties変換

  • レガシーシステムとの互換性
  • シンプルな設定を好む
  • 検索とgrepが簡単
  • IDEの自動補完がより良く動作

実際の使用例

データベース設定

Properties:

# Database Configuration
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=secret123
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true

YAML:

# Database Configuration
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb
username: root
password: secret123
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
hibernate:
ddl-auto: update
show-sql: true

サーバー & ロギング設定

Properties:

server.port=8080
server.servlet.context-path=/api
server.compression.enabled=true

logging.level.root=INFO
logging.level.com.example=DEBUG
logging.file.name=logs/application.log
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} - %msg%n

YAML:

server:
port: 8080
servlet:
context-path: /api
compression:
enabled: true

logging:
level:
root: INFO
com.example: DEBUG
file:
name: logs/application.log
pattern:
console: '%d{yyyy-MM-dd HH:mm:ss} - %msg%n'

複雑なプロパティ

Properties:

spring.kafka.bootstrap-servers=localhost:9092
spring.kafka.consumer.group-id=my-group
spring.kafka.consumer.auto-offset-reset=earliest
spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer
spring.kafka.consumer.value-deserializer=org.apache.kafka.common.serialization.StringDeserializer

YAML:

spring:
kafka:
bootstrap-servers: localhost:9092
consumer:
group-id: my-group
auto-offset-reset: earliest
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
value-deserializer: org.apache.kafka.common.serialization.StringDeserializer

PropertiesとYAMLの比較

✅ Propertiesの利点

  1. シンプル: 1行に1つの設定
  2. 検索容易: grepで簡単に検索
  3. 馴染み: 古いJava標準
  4. 特殊文字: 簡単にエスケープ

✅ YAMLの利点

  1. 可読性: 階層構造が明確
  2. 重複削除: 共通プレフィックスを省略
  3. コメント: より自由なコメント
  4. リスト: 配列表現が可能

⚠️ Propertiesの欠点

  • 重複が多い
  • 階層構造の把握が難しい
  • 複雑な設定は長くなる

⚠️ YAMLの欠点

  • インデントに敏感
  • タブ使用不可(スペースのみ)
  • パースエラーのデバッグが難しい

Spring Bootでの違い

プロファイル使用

Properties:

# application.properties (共通)
app.name=MyApp

# application-dev.properties (開発)
spring.datasource.url=jdbc:mysql://localhost:3306/dev_db

# application-prod.properties (本番)
spring.datasource.url=jdbc:mysql://prod-server:3306/prod_db

YAML (1つのファイルでプロファイル区分):

app:
name: MyApp

---
spring:
config:
activate:
on-profile: dev
datasource:
url: jdbc:mysql://localhost:3306/dev_db

---
spring:
config:
activate:
on-profile: prod
datasource:
url: jdbc:mysql://prod-server:3306/prod_db

リスト/配列表現

Properties (インデックス使用):

app.servers[0]=server1.example.com
app.servers[1]=server2.example.com
app.servers[2]=server3.example.com

YAML (ネイティブ配列):

app:
servers:
- server1.example.com
- server2.example.com
- server3.example.com

Map構造

Properties:

app.config.key1=value1
app.config.key2=value2
app.config.key3=value3

YAML:

app:
config:
key1: value1
key2: value2
key3: value3

使用のヒント

1. 段階的マイグレーション

# 1. 既存のpropertiesをバックアップ
cp application.properties application.properties.bak

# 2. YAMLに変換
# (このツールを使用)

# 3. application.ymlを作成

# 4. テスト後にpropertiesを削除

2. プロファイル分離

# application.yml (共通設定のみ)
app:
name: MyApp

# application-dev.yml (開発環境)
# application-prod.yml (本番環境)

3. 機密情報は環境変数で

spring:
datasource:
password: ${DB_PASSWORD} # 環境変数を使用

4. IDEプラグインの活用

  • IntelliJ IDEA: Spring Bootサポート
  • VS Code: Spring Boot Extension Pack
  • 自動補完と検証機能を活用

注意事項

YAML作成時

# ❌ 間違った例 (タブ使用)
spring:
datasource: # タブ使用 - エラー!

# ✅ 正しい例 (スペース使用)
spring:
datasource: # 2つのスペース

特殊文字の処理

Properties:

# 特殊文字はバックスラッシュでエスケープ
app.message=Hello\nWorld
app.path=C:\\Users\\Example

YAML:

# 引用符で囲む
app:
message: "Hello\nWorld"
path: "C:\\Users\\Example"

数値とブール値

Properties:

server.port=8080
app.enabled=true

YAML (自動型変換):

server:
port: 8080 # 数値として認識
port: "8080" # 文字列として保持
app:
enabled: true # boolean
enabled: "true" # 文字列

トラブルシューティング

変換後のエラー発生

  1. YAMLインデントの確認

    • 2つのスペースを使用
    • タブ文字がないか確認
  2. 特殊文字の確認

    • :, #, @ などは引用符で囲む
  3. 型の確認

    • 数値、booleanが意図通りに変換されているか
  4. プロファイル設定の確認

    • spring.profiles.active 設定

関連ツール

追加リソース

ベストプラクティス

1. 環境別分離

application.yml          # 共通設定
application-dev.yml # 開発環境
application-test.yml # テスト環境
application-prod.yml # 本番環境

2. 機密情報の外部化

spring:
datasource:
password: ${DB_PASSWORD:defaultPassword}

3. コメントの活用

# Database Configuration
# 本番環境では別途設定が必要
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb

4. 一貫した命名

# ケバブケース (kebab-case) 推奨
spring:
data-source: # ✅
driver-class-name: ...

# キャメルケースは避ける
spring:
dataSource: # ❌
driverClassName: ...