4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Hello World あたたたた Modern Delphi 編

Last updated at Posted at 2025-12-23

この記事は Hello World あたたたた Advent Calendar 2025 の記事です。

Delphi XE 以降の新文法や機能を使って、Hellow World あたたたたを実装します。
ここでは、Delphi XE 以降を便宜的に Modern Delphi と呼んでいます。

そもそも「Hello World あたたたた」が何かは 1日目の記事 をご覧ください。

実装例

program Atatata;

{$APPTYPE CONSOLE}

uses
  System.SysUtils;

begin
  Randomize;

  var hako := '';
  var running := True;

  while running do
  begin
    var char := if Random(2) = 0 then 'あ' else 'た';
    Write(char);

    hako := hako + char;

    if hako.EndsWith('あたたたた') then
    begin
      Writeln;
      Writeln('お前はもう死んでいる');

      running := False;
    end;
  end;
end.

実行結果

image.png

コードと文法の解説

program

Modern Delphi でも program からコードがスタートします。

program Atatata;

本来の Pascal とは違い input, output は不要です(付いていてもコンパイルされますが無視されます)。

本来の Pascal の program 宣言
program Atatata(input, output);

APPTYPE

APPTYPE コンパイラ指令も従来通り使えます。

{$APPTYPE CONSOLE}

APPTYPE コンパイラ指令は、このアプリケーションがコンソールアプリであることをコンパイラに伝えるものです。

Unit namespace

Modern Delphi では、ユニットを限定する Unit namespace が導入されています。

unit namespace
uses
  System.SysUtils;
古い書き方
uses
  SysUtils;

乱数の初期化

Modern Delphi でも乱数の初期化は Randomize です。

Randomize;

ただ、Modern Delphi では、Randomize や Random は置き換え可能になっています。
デフォルトでは乱数のアルゴリズムは線形合同法ですが、自由に変更可能です。
詳しくは、こちらをご覧ください。

インライン変数宣言

Modern Delphi では、var セクションによる宣言も可能ですが、インライン変数宣言が推奨されています。

ここでは、変数の宣言と初期値を代入しています。

インライン変数宣言
  var hako := '';
  var running := True;

変数の型は、型推論によって自動的に決定されます。
ここでは出てきませんが、定数もインライン宣言可能です。

while ループ

Modern Delphi でも while に特に変更はありません。

while
  while running do
  begin
    // 中略
  end;

条件演算子

Modern Delphi では、条件演算子(三項演算子 / if 式)が使えます。

var char := if Random(2) = 0 then 'あ' else 'た';
Write(char);

文字列の結合

Modern Delphi でも文字列の結合は + 演算子ですが、文字列が非常に長い場合などは TStringBuilder が使用可能です。
TStringBuilder を使うと、通常の + 演算子よりも高速に結合可能です。

文字列の結合
hako := hako + char

Helper

Modern Delphi では、record helper によって、構造体やプリミティブに対して、メソッドを追加できます。
String 型にはデフォルトで TStringHelper が宣言されており、あたかもクラスのメソッドのように処理を呼び出せます。

TStringHelper が提供する EndsWith メソッドを使って、文字列の最後が あたたたた か判定しています。

TStringHelper.EndsWidth を呼ぶ
if hako.EndsWith('あたたたた') then
begin
  // 省略
end;

また class にメソッドを追加する class helper という物もあります。

出力

出力は従来通り Write を使います。

Writeln; // 引数なしで改行のみ
Writeln('お前はもう死んでいる');

Delphi について

Delphi は Turbo Pascal を母体として、1995 年に Version 1 がリリースされました。

それ以降バージョンを重ねて、現在では Windows / macOS / iOS / Android / Linux のネイティブ・アプリケーションが作成できるようになっています。

文法についても、随時バージョンアップされています。
今回使用したものは下表のようになっています。

機能 導入されたDelphiのバージョン
Unit namespace Delphi XE2 2011
TStringHelper Delphi XE3 2012
インライン変数宣言 Delphi 10.3 Rio 2018
Random32Proc, RandomizeProc Delphi 10.4 Sydney 2020
条件演算子 Delphi 13 Florence 2025

現在、開発販売しているのはエンバカデロ・テクノロジーズです。

DelphiDev.png

近年の特徴

Delphi XE2 からクロスプラットフォーム開発環境となっています(XE は Cross-platform Edition の略です)

Windows / macOS / iOS / Android / Linux のネイティブ・アプリケーションが作成できます。

また、Delphi Communitiy Edition という無償版がリリースされています。
詳しくは、こちらをご覧ください。

ちなみに、現在のバージョン番号は

Delphi X.Y.Z L

という構成になっていて、X.Y.Z がバージョン番号、L が地名となっています。
Z はパッチリリース等で追加される場合があります。
X と L は連動しているため、メジャーリリースで地名が変わります。

現在の最新版は

Delphi 13.0 Florene

となります。

Delphi 13.0 Florence について詳しくはこちらをご覧ください。

未だに進化の続く Delphi

Delphi は 2000 年前後に一世風靡しました。
今では当たり前の property や、コード補完は Delphi から誕生しました。
当時は誰もが一度は使う「イケてる」環境だったのです。

ですが、その後、ゴタゴタがあり利用者が減少しました。
(アンダース・ヘルスバーグと Delphi チームの MS への移籍)

しかし、現在でも利用され、ほぼ毎年新しいバージョンがリリースされている「生きている」環境です。

良かったら使って見てください。

コミュニティ紹介

最後に、Delphi のコミュニティを紹介します。

Delphi Discord Server(最も活発)

Delphi に関する質問・最新情報・雑談など、とにかく情報が早いコミュニティです。
お気軽に参加できます。

Delphi Discord Server 紹介ページ
※こちらは招待リンクそのものではありません。招待リンクは遷移先ページにあります。

その他のコミュニティ

Qiita のこちらの記事に、日本語圏で参加しやすいコミュニティをまとめています。

Delphi Community Edtion - 参考になるコミュニティ

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?