これはCyberAgent Developers Advent Calendar 2023の13日目の記事です
よければ他の記事も見てみてください

はじめに

Developer Productivity室(DP室)のuncle__koです。
DP室ではサイバーエージェントグループにおける事業開発の開発生産性(主にソフトウェアデリバリー領域)を大きく前進させるための開発に従事してます。

OpenAI社が2022年11月30日に公開したChatGPTを皮切りに、いまでは生成AIを聞かない日はないムーブメントになっているかと思います。
ChatGPTやGitHub Copilotの登場によって、日々の開発業務もかなり効率的に生産性が上がっていることかと思います。
今回は生成AI x Developer Productivityをテーマに、開発生産性があがりそうな、個人的に気になっている生成AIを使った開発ツールを紹介したいと思います。

ツール紹介

K8sGPT

https://k8sgpt.ai/

 

 

 

 

引用元:https://openinterpreter.com/

K8sGPTは生成AIを使って、Kubernetesクラスタをスキャン・診断・問題のトリアージをしてくれるOSSツールです。
CLIでの分析とクラスタにデプロイして自動分析もできたりします。
現状defaultで下記Analyzerが有効になっていて

  • podAnalyzer
  • pvcAnalyzer
  • rsAnalyzer
  • serviceAnalyzer
  • eventAnalyzer
  • ingressAnalyzer
  • statefulSetAnalyzer
  • deploymentAnalyzer
  • cronJobAnalyzer
  • nodeAnalyzer
  • mutatingWebhookAnalyzer
  • validatingWebhookAnalyzer

下記がoptionalになってます

  • hpaAnalyzer
  • pdbAnalyzer
  • networkPolicyAnalyzer
  • gatewayClass
  • gateway
  • httproute

さらに言語設定を日本語にも出来るので、初心者や英語が苦手な方でも使いやすいかと思います

分析も k8sgpt analyze コマンドで簡単に行えます。
注意点としては -explain optionを使わない場合は生成AIは使われない点です。

ためしに間違ったマニュフェストファイルを食わせて見るとこのようになります。


$ cat broken-pod.yml
apiVersion: v1
kind: Pod
metadata:
name: broken-pod
namespace: default
spec:
containers:
- name: broken-pod
image: nginx:1.a.b.c
livenessProbe:
httpGet:
path: /
port: 81
initialDelaySeconds: 3
periodSeconds: 3

$ kubectl apply -f broken-pod.yml
pod/broken-pod created

$ kubectl get pods
NAME READY STATUS RESTARTS AGE
broken-pod 0/1 ErrImagePull 0 5s

$ k8sgpt analyze -explain
100% |██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| (1/1, 2426 it/s)
AI Provider: openai

0 default/broken-pod(broken-pod)
- Error: Back-off pulling image "nginx:1.a.b.c"
Error: The Kubernetes pod is unable to pull the specified image "nginx:1.a.b.c" from the container registry.

Solution:
1. Check the image name and version specified in the pod configuration.
2. Verify that the image exists in the container registry.
3. Ensure that the container registry credentials are correctly configured in the Kubernetes cluster.
4. Check for any network connectivity issues that might prevent the pod from accessing the container registry.
5. If using a private registry, make sure to provide the appropriate authentication details in the pod configuration.

日本語の場合はこのようになります。


$ k8sgpt analyze -explain -l Japanese
100% |██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| (1/1, 13 it/min)
AI Provider: openai

0 default/broken-pod(broken-pod)
- Error: Back-off pulling image "nginx:1.a.b.c"
Error: コンテナイメージ "nginx:1.a.b.c" の取得に失敗しました。
Solution:
1. イメージのタグを正確に指定しているか確認してください。
2. Docker Hubまたはプライベートレジストリにイメージが存在することを確認してください。
3. ネットワーク接続を確認し、必要な場合はプロキシを設定してください。
4. イメージの取得に必要な権限を持っていることを確認してください。
5. イメージのダウンロードが遅い場合は、イメージを手動でプルしてから再試行してください。

またtrivyのintegrationを使って脆弱性の検知なども出来たりします。
defaultではUnusedになっているので、Activeしてあげれば使えるようになります。


$ k8sgpt integration list
Active:
Unused:
> trivy

$ k8sgpt integration list
Active:
Unused:
> trivy
$ k8sgpt integration activate trivy
2023/11/29 14:01:23 creating 1 resource(s)
2023/11/29 14:01:23 creating 1 resource(s)
2023/11/29 14:01:23 creating 1 resource(s)
2023/11/29 14:01:23 creating 1 resource(s)
2023/11/29 14:01:23 creating 1 resource(s)
2023/11/29 14:01:23 creating 1 resource(s)
2023/11/29 14:01:23 creating 1 resource(s)
2023/11/29 14:01:23 creating 1 resource(s)
2023/11/29 14:01:23 creating 1 resource(s)
2023/11/29 14:01:23 creating 1 resource(s)
2023/11/29 14:01:23 creating 1 resource(s)
2023/11/29 14:01:23 beginning wait for 11 resources with timeout of 1m0s
2023/11/29 14:01:23 Clearing REST mapper cache
2023/11/29 14:01:24 creating 1 resource(s)
2023/11/29 14:01:24 creating 21 resource(s)
2023/11/29 14:01:26 release installed successfully: trivy-operator-k8sgpt/trivy-operator-0.19.0
Activated integration trivy

$ kubectl get pods
NAME READY STATUS RESTARTS AGE
broken-pod 0/1 ImagePullBackOff 0 9m47s
trivy-operator-k8sgpt-57b5698b96-5q6hs 1/1 Running 0 110s

このようにクラスタにTrivy Kubernetes Operatorがインストールされます。

わざと脆弱性があるpodで試すとこのような形になります。


$ cat vulnerability.yml
apiVersion: v1
kind: Pod
metadata:
name: vulnerable-pod
spec:
containers:
- name: vulnerable-container
image: nginx:1.14.2

$ k8sgpt analyze -e --filter VulnerabilityReport
100% |███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| (1/1, 6 it/min)
AI Provider: openai

0 default/vulnerable-pod(pod-vulnerable-pod-vulnerable-container)
- Error: critical Vulnerability found ID: CVE-2022-1664 (learn more at: https://avd.aquasec.com/nvd/cve-2022-1664)
- Error: critical Vulnerability found ID: CVE-2019-20367 (learn more at: https://avd.aquasec.com/nvd/cve-2019-20367)
- Error: critical Vulnerability found ID: CVE-2019-12900 (learn more at: https://avd.aquasec.com/nvd/cve-2019-12900)
- Error: critical Vulnerability found ID: CVE-2019-8457 (learn more at: https://avd.aquasec.com/nvd/cve-2019-8457)
- Error: critical Vulnerability found ID: CVE-2022-22822 (learn more at: https://avd.aquasec.com/nvd/cve-2022-22822)
- Error: critical Vulnerability found ID: CVE-2022-22823 (learn more at: https://avd.aquasec.com/nvd/cve-2022-22823)
- Error: critical Vulnerability found ID: CVE-2022-22824 (learn more at: https://avd.aquasec.com/nvd/cve-2022-22824)
- Error: critical Vulnerability found ID: CVE-2022-23852 (learn more at: https://avd.aquasec.com/nvd/cve-2022-23852)
- Error: critical Vulnerability found ID: CVE-2022-25235 (learn more at: https://avd.aquasec.com/nvd/cve-2022-25235)
- Error: critical Vulnerability found ID: CVE-2022-25236 (learn more at: https://avd.aquasec.com/nvd/cve-2022-25236)
- Error: critical Vulnerability found ID: CVE-2022-25315 (learn more at: https://avd.aquasec.com/nvd/cve-2022-25315)
- Error: critical Vulnerability found ID: CVE-2022-27404 (learn more at: https://avd.aquasec.com/nvd/cve-2022-27404)
- Error: critical Vulnerability found ID: CVE-2021-3520 (learn more at: https://avd.aquasec.com/nvd/cve-2021-3520)
- Error: critical Vulnerability found ID: CVE-2017-12652 (learn more at: https://avd.aquasec.com/nvd/cve-2017-12652)
- Error: critical Vulnerability found ID: CVE-2022-1292 (learn more at: https://avd.aquasec.com/nvd/cve-2022-1292)
- Error: critical Vulnerability found ID: CVE-2018-25009 (learn more at: https://avd.aquasec.com/nvd/cve-2018-25009)
- Error: critical Vulnerability found ID: CVE-2018-25010 (learn more at: https://avd.aquasec.com/nvd/cve-2018-25010)
- Error: critical Vulnerability found ID: CVE-2018-25011 (learn more at: https://avd.aquasec.com/nvd/cve-2018-25011)
- Error: critical Vulnerability found ID: CVE-2018-25012 (learn more at: https://avd.aquasec.com/nvd/cve-2018-25012)
- Error: critical Vulnerability found ID: CVE-2018-25013 (learn more at: https://avd.aquasec.com/nvd/cve-2018-25013)
- Error: critical Vulnerability found ID: CVE-2018-25014 (learn more at: https://avd.aquasec.com/nvd/cve-2018-25014)
- Error: critical Vulnerability found ID: CVE-2020-36328 (learn more at: https://avd.aquasec.com/nvd/cve-2020-36328)
- Error: critical Vulnerability found ID: CVE-2020-36329 (learn more at: https://avd.aquasec.com/nvd/cve-2020-36329)
- Error: critical Vulnerability found ID: CVE-2020-36330 (learn more at: https://avd.aquasec.com/nvd/cve-2020-36330)
- Error: critical Vulnerability found ID: CVE-2020-36331 (learn more at: https://avd.aquasec.com/nvd/cve-2020-36331)
- Error: critical Vulnerability found ID: CVE-2021-31535 (learn more at: https://avd.aquasec.com/nvd/cve-2021-31535)
- Error: critical Vulnerability found ID: CVE-2021-31535 (learn more at: https://avd.aquasec.com/nvd/cve-2021-31535)
- Error: critical Vulnerability found ID: CVE-2017-8872 (learn more at: https://avd.aquasec.com/nvd/cve-2017-8872)
- Error: critical Vulnerability found ID: CVE-2019-11068 (learn more at: https://avd.aquasec.com/nvd/cve-2019-11068)
- Error: critical Vulnerability found ID: CVE-2017-12424 (learn more at: https://avd.aquasec.com/nvd/cve-2017-12424)
- Error: critical Vulnerability found ID: CVE-2017-12424 (learn more at: https://avd.aquasec.com/nvd/cve-2017-12424)
The Trivy scan result indicates that critical vulnerabilities have been found in the system. Each vulnerability is identified by a CVE ID, and more information about each vulnerability can be found by following the provided links.

Here are the details, risks, and root causes of some of the mentioned CVE IDs:

1. CVE-2022-1664: This critical vulnerability could allow an attacker to execute arbitrary code or perform a denial-of-service attack. The root cause could be a lack of input validation or improper handling of user-supplied data. To mitigate this vulnerability, it is recommended to apply patches or updates provided by the software vendor.

2. CVE-2019-20367: This vulnerability could allow an attacker to execute arbitrary code or gain unauthorized access to sensitive information. The root cause could be a flaw in the authentication mechanism or inadequate access controls. To address this vulnerability, it is important to update the affected software to the latest version or apply any available patches.

3. CVE-2019-12900: This vulnerability may allow remote code execution or information disclosure. The root cause could be a security flaw in the software that allows an attacker to exploit a specific functionality or component. To mitigate this vulnerability, it is crucial to keep the software up to date with the latest security patches or updates.

4. CVE-2019-8457: This vulnerability could lead to remote code execution or unauthorized access to sensitive data. The root cause might be improper input validation or insecure coding practices. To address this vulnerability, it is recommended to apply patches or updates provided by the software vendor and follow secure coding practices.

For the other mentioned CVE IDs, it is necessary to review the details provided in the links to understand their specific risks and root causes. The appropriate solution for each vulnerability would depend on the specific nature of the vulnerability and the affected software or system. It is crucial to follow best practices such as keeping software up to date, applying patches promptly, and implementing secure coding practices to mitigate these critical vulnerabilities.

integrationが増えると出来ることが増えてくると思うので、今後にも期待できそうですよね。

このように簡単にk8s clusterの情報が得れるので、ぜひ活用してみてください。

Open Interpreter

https://openinterpreter.com/

引用元:https://openinterpreter.com/

かなり話題にもなったのでご存知の方も多いと思います。
Open InterpreterはAdvanced Data Analysis(旧Code Interpreter)のOSS版のような感じです。
プログラミング言語のコードを自然言語を通してローカル環境で実行できたりします。

https://github.com/KillianLucas/open-interpreter

下記のようなイメージですね。

引用元:https://openinterpreter.com/

特徴としては下記になるかなと思います。

  • ローカルで実行できる
  • 実行時間とファイルサイズの制限がない
  • 複数のプログラミング言語に対応
  • インターネットへのアクセスが可能

試しに使ってみます。


$ interpreter -y
A new version is available. Please run 'pip install --upgrade open-interpreter'.
> Please run 'pip install --upgrade open-interpreter'

pip install --upgrade open-interpreter

Output truncated. Showing the last 2000 characters.

385.5 kB 30.3 MB/s eta 0:00:00
Downloading stack_data-0.6.3-py3-none-any.whl (24 kB)
Downloading asttokens-2.4.1-py2.py3-none-any.whl (27 kB)
Downloading executing-2.0.1-py2.py3-none-any.whl (24 kB)
Installing collected packages: pure-eval, ptyprocess, appnope, websocket-client, traitlets, tornado, termcolor, pyzmq, python-dateutil, psutil, prompt-toolkit, platformdirs, pexpect, parso, nest-asyncio, MarkupSafe, executing, decorator, debugpy, click, asttokens, yaspin, stack-data, matplotlib-inline, jupyter-core, jinja2, jedi, html2image, comm, tokentrim,
tokenizers, openai, jupyter-client, ipython, litellm, ipykernel, open-interpreter
Attempting uninstall: tokentrim
Found existing installation: tokentrim 0.1.10
Uninstalling tokentrim-0.1.10:
Successfully uninstalled tokentrim-0.1.10
Attempting uninstall: openai
Found existing installation: openai 0.27.10
Uninstalling openai-0.27.10:
Successfully uninstalled openai-0.27.10
Attempting uninstall: litellm
Found existing installation: litellm 0.1.583
Uninstalling litellm-0.1.583:
Successfully uninstalled litellm-0.1.583
Attempting uninstall: open-interpreter
Found existing installation: open-interpreter 0.1.3
Uninstalling open-interpreter-0.1.3:
Successfully uninstalled open-interpreter-0.1.3
Successfully installed MarkupSafe-2.1.3 appnope-0.1.3 asttokens-2.4.1 click-8.1.7 comm-0.2.0 debugpy-1.8.0 decorator-5.1.1 executing-2.0.1 html2image-2.0.4.3 ipykernel-6.27.1 ipython-8.18.1 jedi-0.19.1 jinja2-3.1.2 jupyter-client-8.6.0 jupyter-core-5.5.0 litellm-0.13.2 matplotlib-inline-0.1.6 nest-asyncio-1.5.8 open-interpreter-0.1.16 openai-0.28.1
parso-0.8.3 pexpect-4.9.0 platformdirs-4.0.0 prompt-toolkit-3.0.41 psutil-5.9.6 ptyprocess-0.7.0 pure-eval-0.2.2 python-dateutil-2.8.2 pyzmq-25.1.1 stack-data-0.6.3 termcolor-2.3.0 tokenizers-0.15.0 tokentrim-0.1.13 tornado-6.4 traitlets-5.14.0 websocket-client-1.6.4 yaspin-3.0.1
A new release of pip is available: 23.2.1 -> 23.3.1
To update, run: pip install --upgrade pip

The package 'open-interpreter' has been successfully upgraded on your system.

Please note that there is a new release of pip available. You can update it by running: pip install --upgrade pip. Would you like to proceed with this update?

> yes

pip install --upgrade pip

Requirement already satisfied: pip in /Users/user/.pyenv/versions/3.11.5/lib/python3.11/site-packages (23.2.1)
Collecting pip
Obtaining dependency information for pip from https://files.pythonhosted.org/packages/47/6a/453160888fab7c6a432a6e25f8afe6256d0d9f2cbd25971021da6491d899/pip-23.3.1-py3-none-any.whl.metadata
Downloading pip-23.3.1-py3-none-any.whl.metadata (3.5 kB)
Downloading pip-23.3.1-py3-none-any.whl (2.1 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1/2.1 MB 29.8 MB/s eta 0:00:00
Installing collected packages: pip
Attempting uninstall: pip
Found existing installation: pip 23.2.1
Uninstalling pip-23.2.1:
Successfully uninstalled pip-23.2.1
Successfully installed pip-23.3.1

The pip package manager has been successfully upgraded to version 23.3.1 on your system. Is there anything else you would like assistance with?

Open Interpreterを使おうと思ったら新しいverがあるとのことだったので、新しいverにupgradeを自分でしてもらいました。
このようにローカルでコマンドの実行も可能なのでめちゃくちゃ便利です。

インターネットにアクセスが出来るかも見てみましょう。


$ interpreter -y
> 2023年10月のCyberAgentの株価を教えて下さい

まず、インターネットから2023年10月のCyberAgentの株価情報を取得するために、適切なAPIを見つける必要があります。その後、APIを使用してデータを取得し、ユーザーに提供します。

計画は以下の通りです:

1 インターネットでCyberAgentの株価情報を提供するAPIを検索します。
2 APIを見つけたら、そのAPIを使用して2023年10月の株価データを取得するためのリクエストを作成します。
3 データを取得したら、それをユーザーに表示します。

まずは、CyberAgentの株価情報を提供するAPIをインターネットで検索しましょう。次のステップでは、検索エンジンを使用してAPIを見つけるためのコードを実行します。

> yfinanceを使用してください

了解しました。yfinance パッケージを使用して、CyberAgentの2023年10月の株価情報を取得します。以下が計画です:

1 yfinance パッケージがインストールされているか確認します。インストールされていない場合は、インストールします。
2 yfinance を使用してCyberAgentの株価データを取得するためのコードを書きます。特に2023年10月のデータを取得するようにします。
3 取得したデータをユーザーに表示します。

まずは、yfinance パッケージがインストールされているかどうかを確認し、必要に応じてインストールするコードを実行します。次のステップでは、Pythonコードを実行してこの確認を行います。

 

import subprocess
import pkg_resources

# Check if yfinance is installed
def is_package_installed(package_name):
try:
pkg_resources.get_distribution(package_name)
return True
except pkg_resources.DistributionNotFound:
return False

# Install yfinance if it's not installed
if not is_package_installed('yfinance'):
subprocess.run(['pip', 'install', 'yfinance'], check=True)

# Confirm if yfinance is installed
'Installed' if is_package_installed('yfinance') else 'Not installed'

Output truncated. Showing the last 2000 characters.

prints
return ast.unparse(new_tree)
^^^^^^^^^^^^^^^^^^^^^
File "/Users/user/.pyenv/versions/3.11.5/lib/python3.11/ast.py", line 1708, in unparse
return unparser.visit(ast_obj)
^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/user/.pyenv/versions/3.11.5/lib/python3.11/ast.py", line 818, in visit
self.traverse(node)
File "/Users/user/.pyenv/versions/3.11.5/lib/python3.11/ast.py", line 809, in traverse
super().visit(node)
File "/Users/user/.pyenv/versions/3.11.5/lib/python3.11/ast.py", line 418, in visit
return visitor(node)
^^^^^^^^^^^^^
File "/Users/user/.pyenv/versions/3.11.5/lib/python3.11/ast.py", line 833, in visit_Module
self._write_docstring_and_traverse_body(node)
File "/Users/user/.pyenv/versions/3.11.5/lib/python3.11/ast.py", line 826, in _write_docstring_and_traverse_body
self.traverse(node.body)
File "/Users/user/.pyenv/versions/3.11.5/lib/python3.11/ast.py", line 807, in traverse
self.traverse(item)
File "/Users/user/.pyenv/versions/3.11.5/lib/python3.11/ast.py", line 809, in traverse
super().visit(node)
File "/Users/user/.pyenv/versions/3.11.5/lib/python3.11/ast.py", line 418, in visit
return visitor(node)
^^^^^^^^^^^^^
File "/Users/user/.pyenv/versions/3.11.5/lib/python3.11/ast.py", line 848, in visit_Expr
self.traverse(node.value)
File "/Users/user/.pyenv/versions/3.11.5/lib/python3.11/ast.py", line 809, in traverse
super().visit(node)
File "/Users/user/.pyenv/versions/3.11.5/lib/python3.11/ast.py", line 418, in visit
return visitor(node)
^^^^^^^^^^^^^
File "/Users/user/.pyenv/versions/3.11.5/lib/python3.11/ast.py", line 1306, in visit_IfExp
self.set_precedence(_Precedence.TEST.next(), node.body, node.test)
File "/Users/user/.pyenv/versions/3.11.5/lib/python3.11/ast.py", line 781, in set_precedence
self._precedences = precedence
~~~~~~~~~~~~~~~~~^^^^^^
TypeError: unhashable type: 'list'

The code execution resulted in a TypeError, indicating an issue with the Python environment or the code itself. The error message suggests that there is a problem with the ast module, which is part of Python's standard library and is not directly related to the yfinance package or the code I attempted to run.

To address this issue, I will create and run a minimal reproducible example to verify if the yfinance package is installed without using the ast module. If this does not resolve the issue, I will proceed with the recommended steps to diagnose the problem further.

Let's start by running a simple Python script to import yfinance and print its version to confirm if it is installed. This will help us avoid the complexity that might be causing the current error.

このようにエラーが起きたとしても ‘-y’ optionをつけているので勝手に修正して進めてくれます。


try:
import yfinance
version = yfinance.__version__
print(f'yfinance version: {version}')
except ImportError as e:
print('yfinance is not installed.')

yfinance is not installed.

yfinance パッケージがインストールされていないことが確認されました。次のステップとして、yfinance パッケージをインストールするコードを実行します。インストールが完了したら、再度 yfinance のバージョンを確認して、インストールが成功したことを確認します。

Pythonコードを実行して yfinance パッケージをインストールしましょう。

 

import subprocess

# Attempt to install yfinance using pip
try:
subprocess.run(['pip', 'install', 'yfinance'], check=True)
import yfinance
version = yfinance.__version__
print(f'Successfully installed yfinance, version: {version}')
except Exception as e:
print(f'An error occurred: {e}')

Output truncated. Showing the last 2000 characters.

>=2.31->yfinance) (2.0.4)
Requirement already satisfied: certifi>=2017.4.17 in ./.pyenv/versions/3.11.5/lib/python3.11/site-packages (from requests>=2.31->yfinance) (2023.7.22)
Downloading yfinance-0.2.32-py2.py3-none-any.whl (68 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 69.0/69.0 kB 8.2 MB/s eta 0:00:00
Downloading frozendict-2.3.10-py3-none-any.whl (14 kB)
Downloading lxml-4.9.3-cp311-cp311-macosx_11_0_universal2.whl (8.6 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.6/8.6 MB 52.4 MB/s eta 0:00:00
Downloading numpy-1.26.2-cp311-cp311-macosx_11_0_arm64.whl (14.0 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.0/14.0 MB 50.0 MB/s eta 0:00:00
Downloading pandas-2.1.3-cp311-cp311-macosx_11_0_arm64.whl (10.8 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 10.8/10.8 MB 55.1 MB/s eta 0:00:00
Downloading pytz-2023.3.post1-py2.py3-none-any.whl (502 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 502.5/502.5 kB 32.4 MB/s eta 0:00:00
Downloading soupsieve-2.5-py3-none-any.whl (36 kB)
Building wheels for collected packages: peewee
Building wheel for peewee (pyproject.toml): started
Building wheel for peewee (pyproject.toml): finished with status 'done'
Created wheel for peewee: filename=peewee-3.17.0-cp311-cp311-macosx_13_0_arm64.whl size=247669 sha256=3031d37de748db507dd390a04e5f4b801d2d871e34c3217f3356bbccdc4a2e97
Stored in directory: /Users/user/Library/Caches/pip/wheels/02/20/23/74a10d0cd31f5d41c19b92ddf4c138ceff01b9f4675f19dbf5
Successfully built peewee
Installing collected packages: webencodings, pytz, peewee, multitasking, tzdata, soupsieve, numpy, lxml, html5lib, frozendict, pandas, beautifulsoup4, yfinance
Successfully installed beautifulsoup4-4.12.2 frozendict-2.3.10 html5lib-1.1 lxml-4.9.3 multitasking-0.0.11 numpy-1.26.2 pandas-2.1.3 peewee-3.17.0 pytz-2023.3.post1 soupsieve-2.5 tzdata-2023.3 webencodings-0.5.1 yfinance-0.2.32
CompletedProcess(args=['pip', 'install', 'yfinance'], returncode=0)
Successfully installed yfinance, version: 0.2.32

yfinance パッケージのインストールが成功し、バージョン 0.2.32 がインストールされました。次に、yfinance を使用してCyberAgentの2023年10月の株価データを取得するコードを書き、実行します。

以下が次のステップです:

1 yfinance をインポートし、CyberAgentの株価データを取得するためのコードを書きます。
2 2023年10月のデータを取得するように期間を指定します。
3 取得したデータをユーザーに表示します。

Pythonコードを実行してCyberAgentの2023年10月の株価データを取得しましょう。

 

import yfinance as yf

# Define the ticker symbol for CyberAgent
symbol = '4751.T' # This is an example ticker for CyberAgent on the Tokyo Stock Exchange

# Define the period for October 2023
start_date = '2023-10-01'
end_date = '2023-10-31'

# Fetch the historical data for the defined period
try:
data = yf.download(symbol, start=start_date, end=end_date)
print(data)
except Exception as e:
print(f'An error occurred while fetching the data: {e}')

[*********************100%%**********************] 1 of 1 completed
Open High ... Adj Close Volume
Date ...
2023-10-02 810.700012 816.700012 ... 795.700012 5845400
2023-10-03 794.900024 794.900024 ... 778.700012 6264900
2023-10-04 767.000000 785.000000 ... 779.299988 7447500
2023-10-05 785.000000 791.700012 ... 786.400024 5327300
2023-10-06 785.299988 789.700012 ... 787.200012 4331000
2023-10-10 778.000000 783.700012 ... 781.000000 7058000
2023-10-11 778.099976 780.700012 ... 762.900024 9194300
2023-10-12 777.900024 798.599976 ... 795.200012 10421300
2023-10-13 796.799988 801.599976 ... 777.599976 7712500
2023-10-16 776.500000 780.599976 ... 768.799988 5355700
2023-10-17 771.000000 792.200012 ... 780.000000 5050100
2023-10-18 789.400024 789.900024 ... 783.299988 5897400
2023-10-19 776.799988 792.900024 ... 785.799988 5053400
2023-10-20 782.000000 785.299988 ... 777.900024 3993600
2023-10-23 795.099976 803.000000 ... 778.400024 6850200
2023-10-24 782.200012 794.900024 ... 792.900024 6487300
2023-10-25 791.900024 795.900024 ... 790.000000 6299000
2023-10-26 772.299988 785.400024 ... 768.700012 6016000
2023-10-27 768.700012 774.700012 ... 773.200012 5453700
2023-10-30 768.299988 778.700012 ... 772.500000 5697100
[20 rows x 6 columns]

CyberAgentの2023年10月の株価データを取得することができました。以下は取得したデータの概要です(すべての取引日のデータが表示されています):

日付 始値 高値 安値 終値 調整後終値 出来高
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
2023-10-02 810.70 816.70 ... ... 795.70 5845400
2023-10-03 794.90 794.90 ... ... 778.70 6264900
2023-10-04 767.00 785.00 ... ... 779.30 7447500
... ... ... ... ... ... ...
2023-10-30 768.30 778.70 ... ... 772.50 5697100

各列の意味は以下の通りです:

• Open: その日の始値
• High: その日の最高値
• Low: その日の最安値
• Close: その日の終値
• Adj Close: 調整後終値(配当や株式分割などを考慮した終値)
• Volume: その日の取引量

これらのデータを基に、2023年10月のCyberAgentの株価の動向を把握することができます。特定の日付の詳細なデータが必要な場合は、お知らせください。

こんな感じ勝手に修正も行って目的を達成してくれました。
もう感動するレベルですよね。
これをうまく使えば開発生産性バク上がり間違いなしなので、ぜひ使って欲しいツールです。

InfraCopilot

https://infracopilot.io/

 

 

 

 

引用元:https://infracopilot.io/

InfraCopilotは会話型IaCエディタです。
ユーザはInfraCopilotに会話形式で要望を伝えると、その要望を反映した構成図をInfraCopilotが作ってくれます。

引用元:https://infracopilot.io/

個人的に面白いなと思うのは、生成AI(LLM)はユーザとのinterfaceでしか使用していない点です。
ユーザが何をしたいのかに特化するのは、個人的にはとても良いことだと思います。
実際のアーキテクチャの生成はOSSで公開されてるKlotho Engineを使用してます。

https://github.com/klothoplatform/klotho

個人的にはとても期待しているので、早く完成して触れる日を楽しみに待っています。

Code-Butler

https://github.com/marketplace/actions/code-butler-for-pr-review

 

 

 

 

引用元:https://github.com/marketplace/actions/code-butler-for-pr-review

これは僕が作ったツールです。
GitHub Actionsで動かせます。
スラッシュコマンドでコードレビューを行ってくれます。
レビュー内容のサマリとコードに対するFB、セキュリティ的な懸念事項を指摘してくれます。
また、 /chat コマンドでChatGPTと会話もできます。
生産性を上げるための重要なファクターとしてコードレビューが含まれているので、コードレビューを助けることで、開発生産性があがるといいなと思いつくりました。

下記はレビューのイメージ画像です。

ぜひ使ってみてください。

Sweep

https://sweep.dev/

 

 

 

引用元:https://sweep.dev/

Sweepは生成AIを使ったジュニアデベロッパーをコンセプトに作られたツールです。
Issueの作成からPRの作成まで自動で行ってくれます。

Issueを作るときのTitleのprefixに `Sweep: ` を入れてつくると、Sweepがその情報を読み取って対応を開始してくれます。
下記は簡単な例です。

https://github.com/ouchi2501/code-explain/issues/2

このようにissueを作るとCodebaseを読み取ってどのように対処すべきかをSweepが解析してくれます。

解析が終わると、上記のようにIssueにコメントしてPRまで作ってくれます。

https://github.com/ouchi2501/code-explain/pull/3

残念ながら今回はちゃんとPRを作ることができなかったけど、かなり未来の開発者体験で驚かされます。
今後に期待したいですね。

Bits AI

https://www.datadoghq.com/ja/product/platform/bits-ai/

 

 

 

 

 

引用元:https://www.datadoghq.com/ja/product/platform/bits-ai/

Bits AIはDataDogが提供しているオブザーバビリティデータを学習・分析して、エンジニアがアプリケーションの問題をリアルタイムで解決できるよう支援するAIアシスタントです。
主な機能としては下記です。

  • Query機能
    • 自然言語を使ってメトリックス、トレース、ログ、クラウドコスト、セキュリティ、実際のユーザーセッションなど、すべてのデータについて会話形式で質問できる
  • インシデント管理の合理化
    • インシデントの申告とオンコール対応者の呼び出し
    • サマリーやステータスアップデートを自動で提供
    • インシデントの詳細を記入し、インシデントの重大度を調整し、事後報告の最初の草稿を書くのを支援
  • 問題の解決
    • Datadog ワークフローの推奨とトリガーを依頼して、重大な問題を自動的に修復
    • RUM データに基づいてビジネス クリティカルなユーザー ジャーニーを特定し、アプリケーションをプロアクティブに監視するための合成テストの作成を支援
  • コードレベルの修正
    • 自動生成されたコード修正の提案と単体テスト

メトリクスのデータの分析などはAIのほうが得意だと思っているので、意外とメトリクスについてのInsight情報を提供していくれるのは便利そうですよね。
Insight情報だけじゃなく、インシデントのレポートを作るのも意外と大変なので支援をしてくれるのかかなり嬉しい機能かと思います。
また、実際にコードの修正提案まで行ってくれるのも嬉しいですね。

個人的には、オブザーバビリティで生成AIを使うのであれば、メトリクスの情報から障害の事前検知機能とか面白いなと思ったりしてます。

さいごに

生成AIを使った便利な開発者ツールを紹介してきました。
生成AIをうまく使えば開発生産性をかなり上げることも可能かと思います。
うまく生成AIを活用し、生産性を爆速にしていきましょう。