---
title: "コーディング AI エージェント Google \"jules\"をインフラエンジニアが 使ってみた | grasys blog"
url: "https://blog.grasys.io/post/nakamura-kento/tried-google-jules/"
description: "こんにちは！ 本記事では、新しいコーディング AI エージェント「Jules」をインフラに利用してみた概要や使い方、感想をまとめています。 ※ベータ版となりますので、製品版との相違があるかもしれないのでご注意ください はじめに 基本情報 julesは2025年6月現在ベータ版となります。 始め方については、以下をご確…"
---

# コーディング AI エージェント Google "jules"をインフラエンジニアが 使ってみた

-   ![](/_astro/noicon.CTHOhNiB_1HMs6A.webp)[nakamura kento](/authors/nakamura-kento/)
-   公開日：2025年7月16日
-   カテゴリー：[Tech](/categories/tech/)
-   タグ：[#Jules](/tags/jules/)[#生成AI](/tags/生成ai/)

![コーディング AI エージェント Google "jules"をインフラエンジニアが 使ってみた](/_astro/hero.DbGL5MAj_1lY4rB.webp)

こんにちは！  
本記事では、新しいコーディング AI エージェント「Jules」をインフラに利用してみた概要や使い方、感想をまとめています。  
　※ベータ版となりますので、製品版との相違があるかもしれないのでご注意ください

## はじめに

### 基本情報

julesは2025年6月現在ベータ版となります。  
始め方については、以下をご確認ください。(英語のみ)  
[https://jules.google/docs](https://jules.google/docs)

julesは、質問に対する回答一つにつき1タスクというカウント方法をとっています。  
タスクの終了条件はイメージ的には、  
・juesが導き出す答え≒プルリクエスト数(正常終了)  
・終了宣言(異常終了)  
によって終了します。

### 使用制限

ベータ版時点では1日に制限があり

・5つ同時の質問/コード作成  
・60個のタスク

という制限がありました。(2025/06/02時点)

※仕様変更などはこちら↓を確認してください  
[https://jules.google/docs/changelog/](https://jules.google/docs/changelog/)

また、これら制限は  
翌日にも実行中のタスクがカウントされることを確認しました。

そのため、タスクカウントのリセットのために  
・何かしらの動作終了宣言(このタスクを終了してくださいなど)  
・プルリクエスト宣言  
をするのを推奨します。

[https://jules.google/docs/usage-limits](https://jules.google/docs/usage-limits)

### 言語設定

デフォルトは英語になりますが、日本語で入力しても会話出来ます。  
ただ、以下の問題点がありました。

・対話時の入力自体が、英語を想定されているため、「変換(Space)→確定(Enter)」などを実行した際にEnterキーの打鍵が認識されて送信されてしまう  
・AIが解答を考えるラグが発生すると、英語で回答が返ってくる

このような仕様は、英語での会話を想定されているため、一般的な仕様です。  
現状、デフォルトの言語設定変更はできないため、ユーザ側が英語で話した方が良さそうでした。  
　※会話ないようの日本語自体に違和感はありませんでした。

### ベースイメージの仕様

julesはタスク毎にgit cloneしてサーバを立てているようなのですが、initial setupの動作も参考にしてるようです。  
こちらが初期動作になります↓

initial setupの挙動確認

Plain textcontent\_copy

```
+ sudo mkdir /app
+ sudo chown 1001 /app
+ git config --global core.hooksPath /dev/null
+ git config --global --add url.https://xxxx:REDACTED@github.com/.insteadOf https://github.com/
+ git config --global --add url.https://xxxx:REDACTED@github.com/.insteadOf git@github.com:
+ git clone --depth 1 --shallow-submodules --recurse-submodules https://github.com/xxxx/xxxx /app
Cloning into '/app'...
/app
+ cd /app
```

・カレントディレクトリは、gitリポジトリ配下である/appにいます。  
・サーバは対話毎にベースイメージを元に作成される。(途中のgit pullは不可)  
・リポジトリを更新したい、追加でモジュールを入れたい際には新規のタスクを作成します。  
・ベースイメージのスペックは下記(2025/6時点)

julesのベースイメージ確認「cat /etc/os-release」

Plain textcontent\_copy

```
PRETTY_NAME="Ubuntu 24.04.2 LTS"
NAME="Ubuntu"
VERSION_ID="24.04"
VERSION="24.04.2 LTS (Noble Numbat)"
VERSION_CODENAME=noble
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=noble
LOGO=ubuntu-logo
```

ファイルシステム確認「df -h」

Plain textcontent\_copy

```
Filesystem               Size  Used Avail Use% Mounted on
/dev/vdb                 9.8G   71M  9.2G   1% /rom/overlay
overlayfs:/overlay/root  9.8G   71M  9.2G   1% /
tmpfs                    3.9G     0  3.9G   0% /dev/shm
tmpfs                    1.6G  272K  1.6G   1% /run
tmpfs                    5.0M     0  5.0M   0% /run/lock
tmpfs                    1.0M  4.0K 1020K   1% /run/credentials/@system
tmpfs                    3.9G  224K  3.9G   1% /var/lib/systemd
tmpfs                    796M   12K  796M   1% /run/user/1001
```

プロセス確認「ps aux」

Plain textcontent\_copy

```
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.1  0.1  21168 12288 ?        Ss   01:19   0:02 /usr/sbin/init
root           2  0.0  0.0      0     0 ?        S    01:19   0:00 [kthreadd]
root           3  0.0  0.0      0     0 ?        S    01:19   0:00 [pool_workqueue_release]
root           4  0.0  0.0      0     0 ?        I<   01:19   0:00 [kworker/R-rcu_g]
root           5  0.0  0.0      0     0 ?        I<   01:19   0:00 [kworker/R-rcu_p]
root           6  0.0  0.0      0     0 ?        I<   01:19   0:00 [kworker/R-slub_]
root           7  0.0  0.0      0     0 ?        I<   01:19   0:00 [kworker/R-netns]
root           9  0.0  0.0      0     0 ?        I<   01:19   0:00 [kworker/0:0H-events_highpri]
root          12  0.0  0.0      0     0 ?        I<   01:19   0:00 [kworker/R-mm_pe]
root          13  0.0  0.0      0     0 ?        I    01:19   0:00 [rcu_tasks_kthread]
root          14  0.0  0.0      0     0 ?        I    01:19   0:00 [rcu_tasks_trace_kthread]
root          15  0.0  0.0      0     0 ?        S    01:19   0:00 [ksoftirqd/0]
root          16  0.0  0.0      0     0 ?        I    01:19   0:00 [rcu_preempt]
root          17  0.0  0.0      0     0 ?        S    01:19   0:00 [migration/0]
root          18  0.0  0.0      0     0 ?        S    01:19   0:00 [cpuhp/0]
root          19  0.0  0.0      0     0 ?        S    01:19   0:00 [cpuhp/1]
root          20  0.0  0.0      0     0 ?        S    01:19   0:01 [migration/1]
root          21  0.0  0.0      0     0 ?        S    01:19   0:00 [ksoftirqd/1]
root          22  0.0  0.0      0     0 ?        I    01:19   0:00 [kworker/1:0-mm_percpu_wq]
root          23  0.0  0.0      0     0 ?        I<   01:19   0:00 [kworker/1:0H-kblockd]
root          24  0.0  0.0      0     0 ?        S    01:19   0:00 [cpuhp/2]
root          25  0.0  0.0      0     0 ?        S    01:19   0:01 [migration/2]
root          26  0.0  0.0      0     0 ?        S    01:19   0:00 [ksoftirqd/2]
root          28  0.0  0.0      0     0 ?        I<   01:19   0:00 [kworker/2:0H-kblockd]
root          29  0.0  0.0      0     0 ?        S    01:19   0:00 [cpuhp/3]
root          30  0.0  0.0      0     0 ?        S    01:19   0:01 [migration/3]
root          31  0.0  0.0      0     0 ?        S    01:19   0:00 [ksoftirqd/3]
root          32  0.0  0.0      0     0 ?        I    01:19   0:00 [kworker/3:0-events]
root          33  0.0  0.0      0     0 ?        I<   01:19   0:00 [kworker/3:0H-kblockd]
root          34  0.0  0.0      0     0 ?        S    01:19   0:00 [kdevtmpfs]
root          35  0.0  0.0      0     0 ?        I<   01:19   0:00 [kworker/R-inet_]
root          36  0.0  0.0      0     0 ?        S    01:19   0:00 [oom_reaper]
root          37  0.0  0.0      0     0 ?        I<   01:19   0:00 [kworker/R-write]
root          38  0.0  0.0      0     0 ?        S    01:19   0:00 [kcompactd0]
root          39  0.0  0.0      0     0 ?        SN   01:19   0:00 [ksmd]
root          40  0.0  0.0      0     0 ?        SN   01:19   0:00 [khugepaged]
root          41  0.0  0.0      0     0 ?        I<   01:19   0:00 [kworker/R-crypt]
root          42  0.0  0.0      0     0 ?        I<   01:19   0:00 [kworker/R-kbloc]
root          44  0.0  0.0      0     0 ?        I    01:19   0:00 [kworker/u8:1-events_unbound]
root          48  0.0  0.0      0     0 ?        I<   01:19   0:00 [kworker/0:1H-kblockd]
root          72  0.0  0.0      0     0 ?        S    01:19   0:00 [kswapd0]
root          82  0.0  0.0      0     0 ?        I<   01:19   0:00 [kworker/R-kthro]
root          84  0.0  0.0      0     0 ?        I    01:19   0:00 [kworker/3:1-events]
root          85  0.0  0.0      0     0 ?        I    01:19   0:00 [kworker/2:1-events]
root          89  0.0  0.0      0     0 ?        S    01:19   0:00 [irq/24-ACPI:Ged]
root          96  0.0  0.0      0     0 ?        I<   01:19   0:00 [kworker/R-acpi_]
root         178  0.0  0.0      0     0 ?        I    01:19   0:00 [kworker/2:2-events]
root         179  0.0  0.0      0     0 ?        I<   01:19   
0:00 [kworker/R-kstrp]
root         307  0.0  0.0      0     0 ?        I    01:19   0:00 [kworker/u8:5-events_unbound]
root         352  0.0  0.0      0     0 ?        I    01:19   0:00 [kworker/u8:6-writeback]
root         400  0.0  0.0      0     0 ?        I<   01:19   0:00 [kworker/1:1H-kblockd]
root         403  0.0  0.0      0     0 ?        I<   01:19   0:00 [kworker/2:1H-kblockd]
root         404  0.0  0.0      0     0 ?        S    01:19   0:00 [jbd2/vdb-8]
root         405  0.0  0.0      0     0 ?        I<   01:19   0:00 [kworker/R-ext4-]
root         417  0.0  0.0      0     0 ?        I<   01:19   0:00 [kworker/3:1H-kblockd]
root         430  0.0  0.1  50604 15744 ?        S<s  01:19   0:00 /usr/lib/systemd/systemd-journald
root         454  0.0  0.0      0     0 ?        I    01:19   0:00 [kworker/0:2-events]
root         455  0.0  0.0      0     0 ?        I    01:19   0:00 [kworker/0:3-cgroup_destroy]
root         778  0.0  0.0  23944  5760 ?        Ss   01:19   0:00 /usr/lib/systemd/systemd-udevd
systemd+     803  0.0  0.1  21452 12672 ?        Ss   01:19   0:00 /usr/lib/systemd/systemd-resolved
systemd+     806  0.0  0.0  91020  7808 ?        Ssl  01:19   0:00 /usr/lib/systemd/systemd-timesyncd
root         821  0.0  0.0      0     0 ?        I    01:19   0:00 [kworker/1:2-events]
message+     826  0.0  0.0   9588  4864 ?        Ss   01:19   0:00 @dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
root         835  0.0  0.1  17976  8576 ?        Ss   01:19   0:00 /usr/lib/systemd/systemd-logind
root         849  0.0  0.0   3116  1792 tty1     Ss+  01:19   0:00 /sbin/agetty -o -p -- \u --noclear - linux
root         850  0.0  0.0   3160  2048 ttyS0    Ss+  01:19   0:00 /sbin/agetty -o -p -- \u --keep-baud 115200,57600,38400,9600 - vt220
root         872  0.1  0.2 106992 22528 ?        Ssl  01:19   0:01 /usr/bin/python3 /usr/share/unattended-upgrades/unattended-upgrade-shutdown --wait-for-signal
root         879  0.0  0.0  12020  7936 ?        Ss   01:19   0:00 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
root         883  0.3  0.6 1874676 49152 ?       Ssl  01:19   0:06 /usr/bin/containerd
root         899  0.0  0.1  14860  9856 ?        Ss   01:19   0:00 sshd: swebot [priv]
root         906  0.2  1.0 1988860 87752 ?       Ssl  01:19   0:04 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
jules        908  0.0  0.1  20088 11264 ?        Ss   01:19   0:00 /usr/lib/systemd/systemd --user
jules        909  0.0  0.0  21052  3504 ?        S    01:19   0:00 (sd-pam)
jules        929  0.0  0.0  15276  7224 ?        S    01:19   0:00 sshd: swebot@notty
jules       1093  1.7  0.0   8280  4224 ?        Rs   01:49   0:00 ps aux
```

ディスク確認「free -h」

Plain textcontent\_copy

```
               total        used        free      shared  buff/cache   available
Mem:           7.8Gi       361Mi       7.3Gi       512Ki       365Mi       7.4Gi
Swap:             0B          0B          0B
```

CPU情報確認「cat /proc/cpuinfo」

Plain textcontent\_copy

```
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 63
model name      : Intel(R) Xeon(R) Processor @ 2.30GHz
stepping        : 0
microcode       : 0x1
cpu MHz         : 2299.998
cache size      : 46080 KB
physical id     : 0
siblings        : 4
core id         : 0
cpu cores       : 4
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm cpuid_fault pti ssbd ibrs ibpb stibp fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid xsaveopt arat umip md_clear arch_capabilities
bugs            : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs mmio_stale_data retbleed
bogomips        : 4599.99
clflush size    : 64
cache_alignment : 64
address sizes   : 46 bits physical, 48 bits virtual
power management:

processor       : 1
vendor_id       : GenuineIntel
cpu family      : 6
model           : 63
model name      : Intel(R) Xeon(R) Processor @ 2.30GHz
stepping        : 0
microcode       : 0x1
cpu MHz         : 2299.998
cache size      : 46080 KB
physical id     : 0
siblings        : 4
core id         : 1
cpu cores       : 4
apicid          : 1
initial apicid  : 1
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm cpuid_fault pti ssbd ibrs ibpb stibp fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid xsaveopt arat umip md_clear arch_capabilities
bugs            : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs mmio_stale_data retbleed
bogomips        : 4599.99
clflush size    : 64
cache_alignment : 64
address sizes   : 46 bits physical, 48 bits virtual
power management:

processor       : 2
vendor_id       : GenuineIntel
cpu family      : 6
model           : 63
model name      : Intel(R) Xeon(R) Processor @ 2.30GHz
stepping        : 0
microcode       : 0x1
cpu MHz         : 2299.998
cache size      : 46080 KB
physical id     : 0
siblings        : 4
core id         : 2
cpu cores       : 4
apicid          : 2
initial apicid  : 2
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm cpuid_fault pti ssbd ibrs ibpb stibp fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid xsaveopt arat umip md_clear arch_capabilities
bugs            : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs mmio_stale_data retbleed
bogomips        : 4599.99
clflush size    : 64
cache_alignment : 64
address sizes   : 46 bits physical, 48 bits virtual
power management:

processor       : 3
vendor_id       : GenuineIntel
cpu family      : 6
model           : 63
model name      : Intel(R) Xeon(R) Processor @ 2.30GHz
stepping        : 0
microcode       : 0x1
cpu MHz         : 2299.998
cache size      : 46080 KB
physical id     : 0
siblings        : 4
core id         : 3
cpu cores       : 4
apicid          : 3
initial apicid  : 3
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm cpuid_fault pti ssbd ibrs ibpb stibp fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid xsaveopt arat umip md_clear arch_capabilities
bugs            : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs mmio_stale_data retbleed
bogomips        : 4599.99
clflush size    : 64
cache_alignment : 64
address sizes   : 46 bits physical, 48 bits virtual
power management:
```

ただ、julesから外に出ていく動作(〜の環境作っておいて)などはできませんでした。  
おそらく、git hub以外のアクセスがほとんど閉じているように見えます。

## 実際にjules使って作成してみた

### 1\. 実施内容

julesはコーディングAIなので、実際に何かしらファイルを作成して欲しいと思いつつ、  
インフラエンジニアなので、サーバのconfigファイルの診断と作成をお願いしてみた。

以下2点を依頼してみた

1.  httpd.confのセキュリティ診断
    
2.  httpd.confの作成
    

git hubで連携しているので、ファイルを渡すケース(1)と何も渡さないケース(0)で実行してみました。

### 2\. julesくんとの対話

### 2-1. セキュリティ診断ケース

まず、初めに対象のファイルを渡したいので、julesくんにhttpd.confを見つけてもらわないといけません。

私は→のような構成にしていましたので、

Plain textcontent\_copy

```
┣ .gitignore             
┗ conf/
　┣ httpd/
　┃┗ httpd.conf
　┣ nginx/
     ︙
```

「cd conf/httpdしてください」といいます。  
すると、julesくんが指定もしていないのにファイルを見つけてくれました！(賢い)  
「次に何をしますか？」  
と聞いてきます。(英語で回答してくるので、無情に「日本語で」と言います)

![セキュリティ診断ケースの画面（1）](/_astro/01-d1c6c45ecec18a1390909168ec1188e1-1024x377-249751db.DGV0Gh_Y_Z2bq381.webp)

今回はセキュリティ診断をして欲しいので、お願いしましょう。

![セキュリティ診断ケースの画面（2）](/_astro/02-ec25655ca3ab8aff3199672241c6088b-1024x201-d79f2a9c.CdJAwrYW_ZrNxPF.webp)

すると、julesくんが分析の方針を決めてくれます。  
　※日本語指定しないと英語で表示されます(TT)

![セキュリティ診断ケースの画面（3）](/_astro/03-e3dac529e541eade881f5ff008dcf80d-1024x762-fbce4ce4.K0bggB52_UpHIA.webp)

診断して結果を報告してくれるみたいです。(10分)  
　(詳細はたたんでおきます。)

セキュリティ診断の概要

Plain textcontent\_copy

```
httpd.conf のセキュリティ関連ディレクティブの確認が完了しました。主な結果は以下の通りです：

ServerTokens と KeepAlive はこのファイルに明示的な設定がありませんでした。
/var/www/html ディレクトリで Options Indexes FollowSymLinks が設定されています。Indexes の無効化と FollowSymLinks の見直しが推奨されます。
AllowOverride は適切に None に設定されています。
ルートディレクトリへのアクセスは Require all denied となっており適切です。
User と Group は apache に設定されています。
モジュールのロード状況や一部設定は、リポジトリ外のファイルに依存している可能性があります。
```

セキュリティ診断の詳細

Plain textcontent\_copy

```
httpd.conf のセキュリティ診断結果をご報告します。

全体的な評価

AllowOverride None やルートディレクトリへのアクセス拒否など、基本的なセキュリティ設定は適切に行われています。
ただし、ServerTokens（サーバー情報の詳細度）や KeepAlive（持続的接続）に関する設定は、この httpd.conf ファイルには明示的に記述されていませんでした。これらはApacheのデフォルト値が適用されているか、 /etc/httpd/conf.d/ や /etc/httpd/conf.modules.d/ といったリポジトリ外部のファイルで設定されている可能性があります。そのため、これらの正確な設定状況はこのファイルだけでは完全には把握できません。
同様に、ロードされているApacheモジュールの完全なリストも、リポジトリ内のファイルだけでは特定できませんでした。
具体的な確認事項と推奨事項

ServerTokens ディレクティブ

現状: httpd.conf に記述がありません。デフォルト設定 (多くの場合 Full) では、サーバーの詳細情報（OSバージョン、モジュールバージョンなど）がHTTPレスポンスヘッダに含まれる可能性があります。
推奨: ServerTokens Prod と設定することを推奨します。これにより、クライアントに返されるサーバー情報が最小限（例: Apache のみ）になり、攻撃者に与える情報を減らすことができます。この設定は httpd.conf 本体、または /etc/httpd/conf.d/ 配下の設定ファイルに追加することが考えられます。
KeepAlive ディレクティブ

現状: httpd.conf に記述がありません。デフォルト設定 (Apache 2.4系では KeepAlive On, KeepAliveTimeout 5) が適用されている可能性があります。
推奨: 一般的に KeepAlive On はパフォーマンス向上に寄与しますが、KeepAliveTimeout の値（接続を維持する秒数）はウェブサイトのアクセス特性に応じて調整することが望ましいです。現在の設定が不明なため、確認と適切な値への調整を推奨します。
Options ディレクティブ (in <Directory "/var/www/html">)

現状: Options Indexes FollowSymLinks と設定されています。
推奨:
Indexes: これが有効だと、該当ディレクトリにデフォルトドキュメント（例: index.html）が存在しない場合にファイル一覧が表示されてしまいます。意図しない情報漏洩に繋がる可能性があるため、不要であれば Indexes を削除することを強く推奨します。
FollowSymLinks: シンボリックリンクを許可します。設定に不備があると、ドキュメントルート外のファイルにアクセスされるなどのセキュリティリスクが生じる可能性があります。可能であれば、より安全な SymLinksIfOwnerMatch（シンボリックリンク元と先の所有者が一致する場合のみ許可）に変更するか、シンボリックリンクを使用しない運用をご検討ください。
アクセス制御 (Require ディレクティブ)

現状: <Directory /> (ルートディレクトリ) は Require all denied、<Directory "/var/www/html"> (ドキュメントルート) は Require all granted となっており、基本的なアクセス制御は適切に設定されています。
ログ設定 (ErrorLog, CustomLog)

現状: エラーログとアクセスログはそれぞれ /etc/httpd/logs/ ディレクトリ配下に設定されており、適切です。ログローテーションが別途設定されていることを確認してください。
実行ユーザー (User, Group)

現状: Apacheの実行ユーザーは apache、グループも apache に設定されています。専用の非特権ユーザーで実行されており、これは一般的なベストプラクティスに沿っています。
上記について、ご不明な点や、特定の設定変更をご希望の場合はお知らせください。
```

このままだと、診断の報告をしてくれただけなので、折角なので修正したファイルを作ってもらいます。(10分)

![セキュリティ診断ケースの画面（4）](/_astro/04-cf1bd6a699b6f2cc74eff3cb3b3cb569-1024x943-cd55e6cf.BB4smznV_Z1QpNHc.webp)

変更を加えたファイルを作成してくれたので、git hubにpublishしてもらいます。(コピーもできます)

他にも変更を加えたファイルとのdiffもjule内で確認することもできますので、確認します。

指摘してもらった内容については過不足なく反映されていることを確認できました。

内容精査詳細

Plain textcontent\_copy

```
1.ServerTokens ディレクティブ
ServerTokens Prodの記載を確認
2.KeepAlive ディレクティブ
KeepAlive Onの記載を確認
eepAliveTimeout 5の記載を確認→こちらはサイトによって調整
3.Options ディレクティブ (in <Directory "/var/www/html">)
Indexの削除を確認。

4.アクセス制御 (Require ディレクティブ)
5.ログ設定 (ErrorLog, CustomLog)
6.実行ユーザー (User, Group)
適切なため変更なしを確認
```

![セキュリティ診断ケースの画面（5）](/_astro/05-2f3a3367a272d9092725b2abbd1ab53c-1024x444-3c582935.AiJRRCj-_1UqeXd.webp)

この後の指示としては、自分のやりたいことによって設定が変わると思うので、julesくんとの会話は終えます。  
中身を見ると、足りなかった設定系を追加してくれています。  
設定変更などがあったら、変更してくれているみたいでした！

### 2-2. httpd.confの0からの作成

こちらのケースは先ほどとは違い、何も渡さずに作成してもらう物になります。

こちらでは、  
ECサイト用のconfを作成してもらいました。

![httpd.confの0からの作成の画面（1）](/_astro/06-c062140fbe7fd0f65ead536412ab8c07-1024x183-096fc7f1.BrLWNrWB_Z2c6gBl.webp)

すると、  
どのような内容で作成するかを出してくれます(5分くらい？)

![httpd.confの0からの作成の画面（2）](/_astro/07-4905679eff12ec9d7ac68520abeeffc8-1024x717-be885c72.C5dyAL97_ZkzT64.webp)

この提案の後にこの内容で良いかを聞かれるので、approvedしてあげます。  
すると、作成を始めるので作成し終わるまで待ちます。(10分)

実行コマンドログ冒頭のみ

![httpd.confの0からの作成の画面（3）](/_astro/08-f97138c25c506db8ffff6a159baf30d2-945x1024-482a8daa.D_blzVoO_1aHVtz.webp)

10分くらいすると作成が終わります、スクリプトをリポジトリにPUBLISHするかを聞かれるので、やってもらいましょう。  
中身を見ると…

![httpd.confの0からの作成の画面（4）](/_astro/09-9786f760b34b24aa277b74d0ccbc2815-864x1024-75374674.mCd_oIyN_Z1VRF5U.webp)

使い方として「ADJUST」に記入して欲しい内容などが書かれています。  
ただ、httpd-sslなど別のconfを追加で書いてくれる一方で、

-   LoadModule系は「conf/extra/httpd-mpm.conf」に書いてくれない。
    
-   直下に作ってしまうので、httpd-ssl.confは記載内容と同様のディレクトリに配置しないといけない
    

など、細かいところには手が届いていないようです。  
あくまでコード作成のみみたいです。

ちなみにコメントが英語なのが気になるようなら、コメントを日本語にしてくれませんか？などと伝えるとコメントを日本語に翻訳もしてくれます。(一部非対応確認)

## さいごに

面倒なセキュリティ診断などの確認/修正や、コードの作成などをやってくれるので使い勝手としては良かったです！  
ただ、以下の点が気になりました。

-   デフォルトが英語なので、他の言語も最初に設定できるようにして欲しい
    
-   Enterで送信されてしまうので、日本語の漢字変換時に途中で送信されてしまう
    
-   操作時のログは、報告で送られてくる文章のみ(詳細ログはなし)
    

こちらは、おそらくいつか改善されると思うので気長に待ちたいと思います。

また、他にも

-   terraformファイルの作成
    
-   nginx.conf,httpd.confの作成
    
-   k8sのマニフェストの作成…etc
    

などもやってもらいました。  
ただ、terraformファイルの場合は、backendなどがなかったり最低限の必須項目のみで他は無記入(デフォルト)だったので、人力で修正する必要はやはりありそうです。

ただ、作業裏で作ってくれるのと最低限でも動く物は作ってくれるため、0から取り掛かるのに比べて作業時間が短縮されます。

そのため、julesの使用用途としては、設計後の初期着手が妥当かなと思います。

私の使用用途イメージは、

1.  ざっくりとした方向性/設計を決める
    
2.  ベースとなるファイルをjulesに作成してもらう　←
    
3.  作成してくれたファイルを編集して、実行可能なものに変えてく
    

といったことになりそうです。

質問数に制限があるのが気になりますが、60個も1日に使用するのは稀です。  
更にベータ版の現在は無料なので、この機会に是非みなさんもご使用ください。

ありがとうございました。

## この記事を書いた人

[![](/_astro/noicon.CTHOhNiB_Z24aAgM.webp)](/authors/nakamura-kento/)

### [nakamura kento](/authors/nakamura-kento/)

nakamura kentoのプロフィールと執筆記事をご覧いただけます。

[プロフィールと記事一覧](/authors/nakamura-kento/)