# -*- coding: utf-8 -*-
# ---
# jupyter:
#   jupytext:
#     text_representation:
#       extension: .jl
#       format_name: light
#       format_version: '1.5'
#       jupytext_version: 1.14.4
#   kernelspec:
#     display_name: Julia 1.5.3
#     language: julia
#     name: julia-1.5
# ---

# ## パッケージ
#
# ソフトウェアを再利用可能な形で配布する単位。
#
# ### パッケージ管理の基本
#
# Juliaには、標準でパッケージ管理ツールが同封されている。**パッケージ管理はJuliaのREPLで行うことが多い**。
#
# \]を入力するとパッケージ管理モードに移行する
#
# statusコマンドで、現在インストールされている外部パッケージの状態を確認することができる。
#
# add Distributionsなどのように**addコマンドでパッケージを追加する**。出力メッセージをみると**Project.tomlとManifest.tomlファイルが更新されている。これらのファイルはインストールされたパッケージの情報を管理する重要なファイルである**。
#
# また、**インストールしたパッケージを削除するには、パッケージ管理モードでremoveコマンド(短縮形は、rm)を実行する**
#
# 以前インストールしたパッケージを更新したい場合はupdate(短縮形は、up)を用いる。引数を渡さずに使用すると、インストールされている全てのパッケージをアップデートしようとする。
#
# 逆に、特定のパッケージをなんらかの理由でアップデートしたくない場合は、pinコマンドでパッケージのバージョンを固定する。pinコマンドで固定したバージョンは、freeコマンドで固定を解除できる。また、gcコマンドを使用するおt、パッケージの追加や削除、更新の繰り返しで発生した不要なデータが蓄積した時に自動的に削除してくれる。
#

# ### プロジェクトのパッケージ管理
#
# Project.toml→現在のプロジェクトが依存してるパッケージを管理するファイル。このファイルの中にはプロジェクト自体のメタデータや依存パッケージの一覧がある。
#
# Manifest.toml→実際に使われるパッケージの正確なバージョンやインストール場所を管理するファイル。パッケージマネージャがProject.tomlファイルに記述された依存パッケージの一覧を元に依存解決をして生成する。つまり、Manifest.tomlファイルは、Juliaの実行時にどのパッケージが実際に使用されるかを厳密に指定する。
#
# Project.tomlは人が読み書きするファイルだが、Manifest.tomlはJuliaのパッケージマネージャが自動的に生成するファイルなのでユーザが読み書きする必要性がない。
#
# では、これら二つのファイルを使って実際にプロジェクトのパッケージ管理をしてみる。

# #### プロジェクトのパッケージ管理
#
# まず、~/workspace/myprojectというディレクトリを作成して、Project.tomlを作成する

# + active=""
# # Project.toml
# name = "myproject"
# -

# プロジェクト毎にパッケージ管理を有効にするには、パッケージ管理モードでactivateコマンドを実行する。具体的には、以下のようにactivate .で現在のディレクトリをプロジェクトとして有効化する。
#
# 例：
#
# ・対象のディレクトリでproject.tomlを作成する。そして、対象のディレクトリでjulia -qを叩く
#
# ・pkg>の状態でactivate .を実行して現在のディレクトリをプロジェクトとして有効化する→(myproject) pkg>となる
#
# ・statusを実行すると何のパッケージもインストールされていないことがわかる
#
# ・ここからaddコマンドでパッケージを追加すると、現在のプロジェクトに依存パッケージとして追加される
#
# ・作成したproject.tomlファイルの内容を確認してみると、追加したパッケージが追記される
#
# project.tomlで追加したパッケージの右側にある文字列はUUIDと呼ばれるパッケージを識別するための識別子である。UUIDは覚えづらいので、addコマンドで管理するのが良い。
#
# Project.tomlファイルの更新と同時にManifest.tomlファイルも作成される。
#
# また、juliaコマンドを実行するときに、オプションとして$--project=@.$を指定すると、現在のディレクトリにあるプロジェクトを有効化して実行される。
#
# 例えば、下記のコードをtest.jlとした時に、$julia --project=@. test.jl$とすれば良い。

# + active=""
# using Distributions
# println("OK")
# -

# ## パッケージの作成
#
# Juliaのパッケージは、ディレクトリの中である決まった構造を取る必要性がある。この構造を守らないと、パッケージとして正しく動かないので注意する必要性がある。
#
# ・**README.mdファイル**：パッケージの概要を説明するファイル
#
# ・**LICENSEファイル**：配布しているソースコードのライセンスを指定するファイル
#
# ・**Project.toml**：パッケージのメタ情報や依存パッケージを記述するファイル
#
# ・**srcディレクトリ**：ソースコードを収めるディレクトリ
#
# ・**testディレクトリ**：テストコードを収めるディレクトリ
#
# ・**docsディレクトリ**：ドキュメントを収めるディレクトリ
#
# Project.tomlファイルとsrcディレクトリは、パッケージには必須である。srcディレクトリには、そのパッケージと同じ名前のJuliaソースコードファイル(例えば、Example.jlというパッケージならExample.jlファイル)が収められている。
#
# Licenseファイルやdocsディレクトリなどは必須ではないが、パッケージを公式パッケージとして登録する際に要求されるので、あらかじめ用意しておくのが望ましい。他にもパッケージの依存ライブラリやビルドスクリプトを収めるdepsディレクトリや、継続的インテグレーションのための設定ファイルなどがあることが望ましい。
#
# 今回は、My-Package.jlという簡単なパッケージを作成する。今回は、~/workspace/MyPackageで作成する。
#
# ・~/workspaceディレクトリに移動して、juliaのパッケージ管理モードに移行する。
#
# ・**generate MyPackageコマンド**を実行すると、~workspace/MyPackageディレクトリが作成される。その中にProject.tomlファイルとsrc/MyPacage.jlファイルが作成される。
#
# 注意：生成されたファイルの中身を確認すると、パッケージのUUIDは毎回変わるので心配ない
#
# ・自動生成されたパッケージはすぐに試すことができ、--projectオプションを使ってREPLを起動する。試しに、下記のMyPackage.jlを作成し、usingを使って検証することができる。また、**依存パッケージの追加はaddコマンドを用いるが、Statistics.jlなどの標準ライブラリにあるパッケージでもBase以外はaddコマンドで追加する必要があるので注意が必要である**。また、他のユーザーがパッケージをインストールする場合は、作成したパッケージの依存ライブラリをproject.tomlを参照して自動的にインストールするような仕組みになっている。









StarcoderdataJupyterScriptsDedupFiltered