OmniAICreator/Qiita-1.07M huggingface dataset:
robloxでassistant その108

# 概要
robloxでassistantやってみた。
練習問題やってみた。

# 練習問題
スクリプトだけで、タッチするとカメラの視点を変更するパーツを作れ。

# 手順
- ReplicatedFirstに、LocalScriptを追加。
- スクリプトを書く。

```

local ReplicatedStorage = game:GetService("ReplicatedStorage");
local SetCameraType = ReplicatedStorage:WaitForChild("SetCameraType");
local CurrentCamera = workspace.CurrentCamera;
local changedCamera = false;
if not changedCamera then
	print("ok2")
	SetCameraType.OnClientEvent:Connect(function(cameraPart)
		CurrentCamera.CameraType = Enum.CameraType.Scriptable;
		CurrentCamera.CFrame = CurrentCamera.CFrame + CurrentCamera.CFrame.LookVector * (-2);
		wait(1)
		CurrentCamera.CameraType = Enum.CameraType.Custom;
	end)
end

```
- ServerScriptServiceに、Scriptを追加。
- スクリプトを書く。
```
local part = Instance.new("Part", workspace)
part.Position = Vector3.new(0, 1, -10)
local Players = game:GetService("Players");
local ReplicatedStorage = game:GetService("ReplicatedStorage");
local cameraPart = workspace:FindFirstChild("CameraPart");
local setCameraType = Instance.new("RemoteEvent");
setCameraType.Name = "SetCameraType";
setCameraType.Parent = ReplicatedStorage;
part.Touched:Connect(function(hit)
	local Character = hit.Parent;
	local Humanoid = Character:FindFirstChild("Humanoid");
	if Humanoid then
		local Player = Players:GetPlayerFromCharacter(Character);
		setCameraType:FireClient(Player, cameraPart);
	end
end)
```


# 写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/8e7f425e-1c06-155b-e65f-92ef33206f3e.png)


以上。
python仮想環境構築をバッチファイル化(自動化)

# 環境構築のバッチファイル化
Pythonの仮想環境はvenvを使うことで作成できます。
コマンドプロンプトから実行できるということは、＝バッチファイルにまとめることができるということになります。djangoなど環境構築までの手数が多い作業で重宝します。

## pythonの環境のみをインストールする例
ルートフォルダ名python_django_helloと仮想環境名envは任意のものにしてください。

```ruby:sample01.bat
mkdir python_django_hello
cd python_django_hello
python -m venv env
```
## さらにpipのインストール＆アップグレードする例
外部ライブラリを使うと思うのでpipをインストールします。

```ruby:sample02.bat
mkdir python_django_hello
cd python_django_hello
python -m venv env

cd env
Scripts\python.exe -m pip install --upgrade pip
```

## 外部ライブラリをインストールする例
pandasを使う場合の例

```ruby:sample03.bat
mkdir python_django_hello
cd python_django_hello
python -m venv env

cd env
Scripts\python.exe -m pip install --upgrade pip

rem 外部ライブラリpandasインストール
Scripts\pip install pandas
```

## Djangoのインストールに加え、一連の処理をまとめたパターン
スーパーユーザーの作成のところでは、ユーザー名・パスワードを入力する必要があります。
一部、対話的なやりとりになります。

```ruby:sample04.bat
mkdir python_django_hello
cd python_django_hello
python -m venv env

cd env
Scripts\python.exe -m pip install --upgrade pip

rem 外部ライブラリdjangoインストール
Scripts\pip install django

rem プロジェクトの作成
mkdir project
cd project
django-admin startproject config .

rem アプリの作成
python manage.py startapp app

rem データベースの作成・初期化・スーパーユーザの作成
python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser

pause
```
## スーパユーザー作成の部分について
スーパユーザー作成の部分はインタラクティブ（対話的）になるので、一括で作成できません。

そこで、createsuperuserに引数を与えて、対話的な部分も自動的に処理したいところですが、パスワードの部分は対話的にしか作成できず。この方法ではコマンドラインからの一括作成ができません。

createsuperuser.pyをカスタマイズすることで解決できるらしいですが、ここれは触れません。

## まとめ
参考になれば幸いです。
useMemoについて知る

## はじめに
Reactを触っていて、なんとなくで様々なhooksを使っていましたが、一度自分の中での整理も含めて記事を書いてみようと思いました。
文章をパブリックに公開することは初めてなので、拙い箇所もあるとは思いますが、お暇なときにでも一瞥していただけると幸いに思います。
また記事内で間違えた記述や誤植があればご指摘いただけると嬉しく思います。

## useMemoとは
React公式ドキュメントによると
「 useMemo is a React Hook that lets you cache the result of a calculation between re-renders. 」
と記述されています。
意訳すると「再レンダリングの間、計算結果をキャッシュとして保存しておくために用いる。」とのことです。

### 例
仮に
同じチームに所属する3人へそれぞれ「36を3乗せよ」という課題を与えたとします。（課題が与えられるタイミングはバラバラ）
この問題が1分で計算できるとしたら3人で3分の時間を費やすことになります。
しかしここで1人が1分かけて問題を解き、みんなが見える場所に「36×36×36=46656」と書いたメモを残したとします。
そうしたらどうでしょう。3人で3分かけていたところを3人で1分になりました。
チームとして2分の削減となりチームのパフォーマンスが向上しました。
上記のメモをRaectのレンダリングごとにで行ってくれるのがuseMemoの機能になります。

### 再レンダリング
もし「36の3乗」が「20の2乗」に変化したらメモは意味のないものになりますので、新たに「20×20=400」というメモを貼り出します。
これが値が変更され再レンダリングされた際の動作になります。

このように計算結果をメモしておくことでパフォーマンスの向上を狙うことが主な使用用途になると思います。

## サンプル
```js
const cachedValue = useMemo(calculateValue, dependencies)
```
第一引数には実行したい処理、第二引数には依存させたい値を入れておきます。
先ほどの例にあてはめますと第一引数には「36*36*36=」の処理、第二引数には「20と乗算する値(2)」になります。

以下、useMemoのサンプルになります。
```jsx
import React, { useMemo, useState } from 'react';

export const Calculate = () => {
  const [number, setNumber] = useState(36);
  const [power, setPower] = useState(3);
  const [calcCount, setCalcCount] = useState(0); // 計算関数の実行回数
  const [toggle, setToggle] = useState(true); // 再レンダリングをトリガーするための状態

  // メモ化された計算関数
  const result = useMemo(() => {
    console.log('Calculating...');
    setCalcCount(prev => prev + 1); // 計算関数の実行回数をインクリメント
    return Math.pow(number, power);
  }, [number, power]);

  console.log('レンダリングされました。')

  return (
    <div>
      <h1>課題</h1>
      <div>
        <label>
          Number:
          <input
            type="number"
            value={number}
            onChange={(e) => setNumber(Number(e.target.value))}
          />
        </label>
      </div>
      <div>
        <label>
          Power:
          <input
            type="number"
            value={power}
            onChange={(e) => setPower(Number(e.target.value))}
          />
        </label>
      </div>
      <button onClick={() => setToggle(prev => !prev)}>
        レンダリング
      </button>
      <div>
        <p>結果： {result}</p>
        <p>計算関数実行回数： {calcCount}</p>
      </div>
    </div>
  );
}
```
お手元の環境にてコンソールの確認しながら、useMemoの第二引数の値を変更せずレンダリングボタンを押していただければ、コンソールにuseMemo内部の処理が行われていないことが確認いただけると思います。
※strict modeでは一部関数が2度行われるため、コンソールに2回表示されたりしますが気にしないでください。

## 参考文献
- [useMemo-React] https://react.dev/reference/react/useMemo
UnityのBRP/URPのシェーダー関数の対応（翻訳）

先日、URPで実装していたシェーダーのコードを改めてBRPで実装しなおすということがありました。最近ググって出てくるコードはURPが多くなってきていますが、BRPとの対応表みたいなものが意外に見つからず苦労しましたので、メモしておきます。  
すべての関数には対応できていないので、代表的なものになります。  
また、新しいURPでの対応はまだ確認できておりません。

# includeする関数の違い
デフォルトでシェーダーを作るとインクルードされていると思いますが、念のため記載します。
| - | BRP | URP |
| ---- | ---- | ---- |
| コア機能 | Unity.cginc | Package/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl | 
| ライト | AutoLight.cginc | Package/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl | 
| 影| Unity.cginc | Package/com.unity.render-pipelines.universal/ShaderLibrary/Shadows.hlsl | 
| サーフェスシェーダ | Lighting.cginc | なし[^1] | 

[^1]: URPにはサーフェスシェーダはありません。

- その他一般的なURPには、SpaceTranform.hlsl, ShaderVariablesFunctions.hlsl, input.hlsl, Color.hlsl, DeclareDepthTtexture.hlsl, DeclareOpaqureTexture.hlslが含まれます。
- Core.hlslは直接参照できますが、UnityInput.hlsl, UnityInstancing.hlsl, SpaceTranforms.hlslは再定義を防ぐためにプレフィックスをつける必要があります。



# 関数の対応表
| BRP | URP |
| ---- | ---- |
| TRANSFORM_TEX(uv, texure_name) | TRANSFORM_TEX(uv, texure_name) |
| tex2D, tex2Dlod | SAMPLE_TEXTURE2D,<br>SAMPLE_TEXTURE2D_LODなど。 |
| UnityObjectToClipPos(positionOS) | TransformObjectToHClip(positionOS), <br>GetVertexPositionInputs().positionCS |
| UnityObjectToWorldNormal(normalOS) | TransformObjectToWorldNormal(normalOS),<br>GetVertexNormalInputs().normalWS |
| ComputeScreenPos(positionCS) | ComputeScreenPos(positionCS),<br>GetVertexPositionInputs().positionNDC |
|ComputeScreenPos(positionCS)|GetVertexPositionInputs().positionNDC|
|ComputeGrabScreenPos(positionCS)| URPではGrabPassをサポートしません。 |
|WorldSpaceViewDir(positionOS)	| - |
|UnityWorldSpaceViewDir(positionWS)	|GetWorldSpaceNormalizeViewDir(positionWS)|
|WorldSpaceLightDir(positionOS)|-|
|UnityWorldSpaceLightDir(positionWS)/<br>_WorldSpaceLightPos0|GetMainLight().direction|
|WorldSpaceLightDir(positionOS)|-|
|Shade4PointLights(...)	|-|
|ShadeVertexLights(vertex, normal)	|	VertexLighting(positionWS, normalWS)|
|ShadeSH9(half4(worldNormal,1))	|SampleSH(normalWS)，|
|UNITY_FOG_COORDS(n)|float fogFactor : TEXCOORDn|
|UNITY_TRANSFER_FOG(o, positionCS)	|OUT.fogFactor = ComputeFogFactor(positionCS.z)|
|UNITY_APPLY_FOG(fogCoord, color, fogColor)	|color.rgb = MixFog(color.rgb, fogCoord)|
|UNITY_APPLY_FOG_COLOR(fogCoord, color)	|color.rgb = MixFogColor(color.rgb, fogColor.rgb, fogCoord)|
|Linear01Depth(z)|Linear01Depth(z, _ZBufferParams)|
|LinearEyeDepth(z)|LinearEyeDepth(z, _ZBufferParams)|
|ParallaxOffset(h, height, viewDirTS)|ParallaxOffset1Step(h, amplitude, viewDirTS)|
|Luminance(rgb)	|Luminance(rgb)|
|V2F_SHADOW_CASTER|float4 positionCS : SV_POSITION;|
|TRANSFER_SHADOW_CASTER_NORMALOFFSET |ShadowCasterPass.hlslGetShadowPositionHClip(input)|
|SHADOW_CASTER_FRAGMENT	|-|
|SHADOW_COORDS(1)|float4 shadowCoord : TEXCOORD1;|
|TRANSFER_SHADOW(o)	|TransformWorldToShadowCoord(inputData.positionWS)|
|SHADOW_ATTENUATION(i)|	MainLightRealtimeShadow(shadowCoord)，|

# 参考
https://blog.csdn.net/yx314636922/article/details/124604783
Microsoft Fabric (ウェアハウス or レイクハウスのSQL 分析エンドポイント)への ODBC 接続

## はじめに

ODBC で接続できるので、かなりのツールから Microsoft Fabric を利用することが可能です

## 前提条件

- [ODBC Driver for SQL Server](https://learn.microsoft.com/ja-jp/sql/connect/odbc/download-odbc-driver-for-sql-server?view=sql-server-ver16) が必要です。
- Fabric 上にウェアハウスor SQL 分析エンドポイント(レイクハウスに付随)が存在し、アイテムの読み取り権限が必要です

### 補足
ウェアハウスとレイクハウスの関係について。

レイクハウスを作成すると読み取り専用のウェアハウスが自動作成されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/2ed44638-0b3a-844c-26da-1b3895f13e1b.png)

参考：
- https://speakerdeck.com/ryomaru0825/microsoft-fabric-kai-fa-gaido?slide=29
- https://learn.microsoft.com/ja-jp/fabric/data-warehouse/get-started-lakehouse-sql-analytics-endpoint

## 手順

1. 接続先の確認
1. odbc 接続の作成
1. ツールでの利用

### 接続先の確認

ここで取得した値はMSSQL系のデータベースに対して Entra ID 認証で接続できる様々なツールから利用可能です（Power BI など）

1. [Fabric](https://app.fabric.microsoft.com/home) にログインして、対象のウェアハウスまたはSQL 分析エンドポイントの・・・から、SQL接続文字列をコピーして値を取得
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/28ee7b3b-1d07-4606-e797-c219d35d2319.png)


### odbc 接続の作成

1. odbc データソースを開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/129be9ad-60f8-dd99-6781-103321e3ceaa.png)
2. 追加を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/8aa0fcd5-cb09-3131-596e-2f08a0effdcb.png)
3. ODBC Driver for SQL Serverを選択して完了
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/74490629-f2ee-61a9-a782-887bb5f63a30.png)
4. 接続先の確認で取得した値をserverに入力して次へ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/37f9d221-1a44-8995-442f-751ccddc1dab.png)
5. Azure AD 認証となる選択肢を選択して完了まで進めます。（今回は対話型認証を選択）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/0e151453-86b5-d26d-11c5-dc5a72b322c4.png)
6. 完了後、Test Data Sourcesを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/e27e8760-a156-f583-fe2b-9300ff23c558.png)
7. Entra ID 認証の画面が立ち上がるので認証することでテスト完了
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/891071ed-8b7d-0920-df70-bf7855cfcb9c.png)
8. ODBC 接続が作成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/8ed3f97b-db16-02bf-0bb0-6bcf43622d11.png)

### ツールでの利用

例としてPower BIからODBC接続してみます
1. データソースからODBC選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/6550c787-64b8-e543-ac03-d7485e2ce439.png)
2. 作成したODBC接続を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/ed69b0d1-8e20-b6e6-f301-e6e341ed025e.png)
3. 既定またはカスタムで接続
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/5683678d-4b0d-6597-e06f-099c56f9693e.png)
4. Entra ID 認証の画面が立ち上がるので認証することでデータベースとテーブルが選択できるようになります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/3692f7f0-15e8-1c65-9390-705db0840e81.png)

## 参考
- https://learn.microsoft.com/ja-jp/fabric/data-warehouse/connectivity#connect-using-odbc
CSSメタ言語のすすめ

## CSSメタ言語とは
- CSSの不便なところを解消する言語
- CSSをそのまま書いてもよい
- 代表的なのはSaSS(/SCSS)か。次点でLess

※本記事の中のサンプルコードは全てSCSSです。が、個人的にはLessが好きです。
  CSSに見た目が近く、学習コストが低いです。

----

## 仕事で使うべき理由
大きく２つ。
- DRYを実現する
- 便利機能

----

## DRYを実現する機能(1/4)
- 入れ子を素直に表現できる

CSS
```css
p.description {
  font-size: 90%;
}
p.description span.error {
  background-color: #ff9999;
}
```

SCSS
```scss
p.description {
  font-size: 90%;
  span.error {
    background-color: #ff9999;
  }
}
```

----

## DRYを実現する機能(2/4)
- 変数：値に**名前を付けられる**

```scss
$error-color: #ffaaaa;
ul.error {
  background-color: $error-color;
}
p {
  span.error {
    background-color: $error-color;
  }
}
```

----
## DRYを実現する機能(3/4)
- Extend/Inheritance（拡張/継承）：まとまった設定に名前を付けられる

```scss
%message-shared {
  border: 1px solid #ccc;
  padding: 10px;
  color: #333;
}
.success {
  @extend %message-shared;
  border-color: green;
}
.error {
  @extend %message-shared;
  border-color: red;
}
```

----
## DRYを実現する機能(4/4)
- モジュール化：定義の分割と名前空間を提供

```scss
// _base.scss
$font-stack:    Helvetica, sans-serif;
$primary-color: #333;

body {
  font: 100% $font-stack;
  color: $primary-color;
}
```

```scss
// styles.scss
@use 'base';

.inverse {
  background-color: base.$primary-color;
  color: white;
}
```

----
## 便利機能
- 色の操作：例えば「この色を透明にしたもの」などという指定が可能

```scss
// ベースとなる色
$base-color: #333;

// rgbaで透明度を変える
.rgba {
  color: rgba($base-color, 0.8);
}
```

----
## 導入のハードル
- ビルド（SCSSからCSSに変換し、HTMLから参照させる）が必要
 　→　バンドラの導入が必要です

※これを機会に、HTML/JS/CSSを生で書く手法を見直しましょう！

----
## 最後に
- Lessの方が学習コストは低いと思います
- 「DRYを実現する機能」で紹介した４つの機能により開発効率性や堅牢性、保守性が高まります。これがCSSメタ言語を導入する最も大きな動機！
仕事において自分が心掛けていること

# はじめに
今回、Qiitaの記事を書くのは初めてでドキドキしていますが、
少しでも未経験の方など参考になるところがあればいいなと思いながら記事作成いたしましたので読んでいただけたら嬉しいです。

# ①時間厳守
私は時間が守れなくてしくじったことがあるわけでもありませんが、
小さい頃から**遅刻**を恐れ20分~30分前に着くよう心掛け、社会人になっても変わらず20分~30分前に着くようにしています。
（※私生活でも待ち合わせ場所に20分~30分前に着く癖がついてしまいました。）

早く着けば良いこともあり、**メール確認**や**本日何をするかまとめる**ことが出来ます。
また、**現場先の方とコミュニケーション**が取れたり**業務の不安を減らすこと**などが出来ます。

未経験の方はわからないことが沢山あり不安になってしまうかと思いますが、
早めに会社に着くと出来ることが沢山あるので朝起きるのが辛いという方がいるかもしれませんが頑張ってみてください。
# ②報告、連絡、相談
報告、連絡、相談なんて当たり前じゃないかと思われますが、、、

私の経験上、現場で他の方が報告、連絡、相談をしていないことで業務が止まってしまうということを目にすることがありました。

特に**話すのが苦手**な方が出来ていなかった印象があります。

私も初めての現場に就いた際は、話すのが苦手でしたし早く業務を覚えなくてはいけないというプレッシャーで頭真っ白になることも度々ありました。

そんなとき、報告をする際に変な伝え方をしてしまい上長を混乱させてしまったことがありました。

その時、上長から注意を受けた後に「**就いたばかりで話かけにくい環境でごめんね！これからはこっちも話しかけるし気にせず相談とか話しかけてね！**」と仰っていただいて救われたのを今でも覚えています。

それから、話すことが好きになりわからないことをわからないままにせず直ぐに報告、連絡、相談をする癖がつくようになりました。

その経験から私は何事も報告、連絡、相談をすることを心掛けることは大切だと思いますが、一番大切なのは**話すのが苦手な方をそのままにせず寄り添って報告、連絡、相談がしやすい環境作り**だと思います。

未経験の方で話すのが苦手な方もいるかと思います。
話をかけるというのは勇気も必要ですし緊張してしまうかもしれませんが、
まずは落ち着いて**挨拶**から意識してみると良いかもしれません。
同じ経験を私もしているので不安になったときはこの記事を思い返していただければと思います。
# ③自分を褒める
報告、連絡、相談の時に真面目なことを書いたので最後は少し柔らかい内容にしました。

突然で申し訳ないのですが少しだけ思い出していただきたいです！

**「最近いつ褒められましたか？」**

パッと思い出せた方は羨ましい限りです、、、

パッと思い出せない方は全然落ち込まないで大丈夫です！！
寧ろ沢山いらっしゃるかと思います。

何故、自分を褒めることを心掛けているかというと、
大人になると悲しいことに**出来ることが当たり前**のような自分にも他人にも厳しい環境になり毎日辛いなと思うことが増えていきます。

ですが、大人になってから褒められると恥ずかしいと思う気持ちもありながらも褒められるのは嬉しいはずですし明日も頑張ろうと思うはずです。

1日の最後に**早起き出来るようになった**とか**業務を覚えて仕事が出来るようなった**とか**報告、連絡、相談を意識して仕事が出来るようになった**など自分振り返って褒めてあげてください。

そして、他の方にも褒めてあげてください！！

# 最後に
初めての記事作成でしたがいかがでしたでしょうか。

心掛けていることよりも仕事するときの意識や考えが多くなってしまいましたが未経験の方以外も参考にしていただき今後良い環境にする方が増えればいいなと思っております。

最後までお読みいただきありがとうございました。
Rspecでプログラム内(実装コード内)の標準出力を無効にする

# 概要

実装内で `p` とか `puts` とかして標準出力してる場合など、Rspecの実行結果にもそれが紛れてしまうことがあるが、その対策

もちろんRspec自体が吐き出す標準出力はそのままで、実装内のものだけを除外したい


# 設定例

rails_helper に以下を設定

```rb
RSpec.configure do |config|
  config.before(:all) do
    File.write(File.join(File.dirname(__FILE__), 'dev', 'null.txt'), 'w')

    @original_stderr = $stderr
    @original_stdout = $stdout
    $stderr = File.new(File.join(File.dirname(__FILE__), 'dev', 'null.txt'), 'w')
    $stdout = File.new(File.join(File.dirname(__FILE__), 'dev', 'null.txt'), 'w')
  end

  config.after(:all) do
    $stderr = @original_stderr
    $stdout = @original_stdout
    @original_stderr = nil
    @original_stdout = nil
  end

```

標準出力の内容は `spec/dev/null.txt` に書き出されるようになる
あとは `spec/dev/null.txt` を gitignore しておくと良い


# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ


# プロフィール・経歴

https://github.com/YumaInaura/YumaInaura
[baserCMS]5系で4系と同じ任意のログファイル出力を設定する


baserCMS5系で、任意のログファイルを出力する仕組みの紹介です。
たとえば、プラグインで設定するときはこのようにすると良いです。

- plugins/Example/config/setting.php

```php
use Cake\Log\Engine\FileLog;
use Cake\Log\Log;


if (!defined('LOG_EXAMPLE')) {
	define('LOG_EXAMPLE', 'log_example');
	Log::setConfig('log_example', [
		'className' => FileLog::class,
		'path' => LOGS,
		'scopes' => ['log_example'],
		'levels' => ['info'],
		'file' => 'log_example',
		'rotate' => 5, // 未指定の場合は10
		'size' => 10485760, // 未指定の場合は10485760の10MB
	]);
}
```

この設定をすることで、以下に出力されます。
logs/log_example.log



### 環境
- PHP 8.1.5
- baserCMS 5.0.15


## ちょっと注意する点

setting.php では設定値を return するので、その前（上）に記述すること。

```php
// この上に記述
return [
    'BcApp' => [
        // Add your plugin's configuration here
    ]
];
```


### 参考

- https://book.cakephp.org/5/ja/core-libraries/logging.html
- https://baserproject.github.io/5/
iOSアプリをリリースするためのFlutterの手順

# はじめに
初めて`Flutter`でiOSアプリを開発した際のロードマップをまとめます。
初学者の方の助力になれば幸いです。
この記事ではアウトラインのみを記載しているため詳細は逐一検索して進めてください。


## 1. **開発環境のセットアップ**
   - Flutter SDKをインストールする
    [docs.flutter.dev](https://docs.flutter.dev/get-started/install "install flutter")


   - Xcodeをダウンロードしてインストールする
   Simulatorでデバッグするためと完成したアプリをリリースするのために必要です
   [developer.apple.com](https://developer.apple.com/jp/xcode/ "Xcode")


   - VS codeをダウンロードしてインストールする
   IDE（統合開発環境）として使用します

   - ~~Android Studioをダウンロードインストールする。~~
   ~~今回はIOSアプリを目的としているので不要ですがFlutterはマルチプラットフォームに対応しているので入れておくと今後の開発にgoodです。~~

>FirebaseやAdmobのアカウント作成もやっておきたくなりますが、私の経験的には実装するCodeを書く段階になってから手をつけたほうがいいです。


## 2. **アプリの開発**

`flutter create`から始まりウィジェットができるたびに`flutter run --debug`を実行して確認しました。

flutterのコマンドは下の記事を参考にしました。

[Flutterコマンド一覧まとめ](https://qiita.com/kurun_pan/items/f9251b1827ce9dca9e14)

Firebase（ログイン機能やアプリ内データの管理）やAdmob（アプリ内広告）もこの段階で導入しました。

:::note warn
参考Codeの更新日時に注意

DartにNull safetyが実装される前のCodeをコピペするとエラーになるので注意です。（５敗）
:::

## 4. **Apple Developerアカウントの作成**
   - Apple Developer Programにサインアップする
   - iOSアプリの証明書やプロビジョニングプロファイルを作成する

リリースできる形までアプリが完成したら[Apple Developer Program](https://developer.apple.com/jp/programs/)に登録します。私の場合（２０２４年5月）、支払いから承認までに３日かかりました。

## 5. **アプリのビルドとアーカイブ**
   - Xcodeを使用してアプリをビルドし、アーカイブする
   - アプリのバージョンやビルド番号を設定する

私が参考にした動画やサイトでは事前にApp Store Connect上でアプリを作成していましたが、私が実施した際はアーカイブ時にXcodeから作成できたのでそのほうがバンドルIDなどの記述を省けるので楽かと思われます。Xcodeの仕様次第なので公式ドキュメントを参照すべしです。


## 6. **App Store Connectでのアプリの設定**
   - アプリの情報を入力する
   - スクリーンショットやプレビュー動画をアップロードする

スクショはSimulatorの`Dbug`の文字が写っているとRejectされるので注意です。
画像の編集には`Canva`を使いました。

概要やキーワードはASO（アプリの検索エンジン最適化）に影響しますのでしっかり書くのが良いです。


## 7. **審査待ち**
   - Appleによるアプリの審査を待つ
   - 審査に合格したらリリースする

## 8. **リリース**
   - Appleからの承認後、App Storeでアプリをリリースする
アプレンティスシップWebテスト参加記録

## はじめに
はじめまして！
未経験からエンジニアを目指している大学１年生のkashitetoと申します。
今回は、選考突破者のみ参加可能なエンジニア実習『APPRENTICE』のWebテストの一部を解きたいと思います。

## 『APPRENTICE』とは
プログラミング未経験から企業内定を勝ち取るためのエンジニア実習です。詳細については以下のページからご確認ください。

https://apprentice.jp/lp

## 課題について
2. QUEST を解く
[linux][Level1] Linux が何かを説明できる

## Linux が何かを説明できる

#### 1,OSとは何かを、プログラミング初心者にわかるように説明してください。
OSは、Operating System（オペレーティングシステム）の略で、パソコンの操作やアプリなどを使うために必要なソフトウェアのことを指します。
ソフトウェアとは、ユーザーから「やりたいこと」の指示を受け取り、それを処理するプログラムの集まりを指した言葉です。
OSの主な機能は、ファイルの管理、メモリ管理、マルチタスクなどのプロセス管理、更にはユーザーインターフェースや、TCP/IPなどのネットワークなど、コンピューターを操作する上で、ハードウェアとユーザーをつなぐための基本的動作を定めています。
引用記事:

https://school.dhw.co.jp/course/3dcg/contents/w_os.html

https://tech-camp.in/note/pickup/1013/

#### 2,Linux とは何かを、プログラミング初心者にわかるように説明してください。

Linuxとは、先ほど説明したOSの一種で誰でも使える無料のオープンソースであるという点が大きな特徴の１つです。
オープンソースとは、ソフトウェアを構成しているプログラム「ソースコード」を、無償で一般公開することです。
Linuxのできることとして、新たなOSを作れること、サーバを構築できること、低スペックのデバイスでも使えることなどが挙げられます。

引用記事:

https://hnavi.co.jp/knowledge/blog/linux-merit/

https://lab.techhub.jp/linux-basic/

https://it-trend.jp/words/open

#### 3,Linux におけるカーネルとディストリビューションについて、それぞれプログラミング初心者にわかるように説明してください。
**カーネルについて**
OSの中核となる部分を「カーネル」と呼びます。ソフトウェアとハードウェアを上手く繋げて、ユーザーの指示を正しく反映させる役割を担っているのが特徴です。Linuxにおけるカーネルは、メモリ管理機能やネットワーク、ファイルシステムなどから成り立っています。

**ディストリビューションについて**
OSを利用するには、カーネルと様々なソフトウェアを組み合わせる必要があり、その作業の煩雑さを避けるために最初からそれらを組み合わせた形で配布されたものをディストリビューションと呼びます。

#### 4,ディストリビューションには色んな種類があります。有名なディストリビューションを3つ以上挙げてください。
Slackware系
Slackware、Plamo、SLAX等

Redhat（rpm）系
Fedora、CentOS、MIRACLE、RedFlag、PS2 Linux、Turbo、Vine、SUSE等

Debian系
Debian/GNU Linux、Ubuntu、KNOPPIX、Omoikane、Linspie等

引用記事:

https://ja.wikipedia.org/wiki/Linux%E3%83%87%E3%82%A3%E3%82%B9%E3%83%88%E3%83%AA%E3%83%93%E3%83%A5%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3

https://lpi.or.jp/lpic_all/linux/intro/intro02.shtml

#### 5,Linux はコマンドを使って操作をすることが多いです。その際に使用するソフトウェアがシェルです。シェルとは何か、プログラミング初心者にわかるように説明してください。またシェルには色んな種類があり、代表的なシェルを2つ以上挙げてください。

**シェルとは何か**
ユーザーの指示を、Linuxのカーネル（中核）へ伝えるためのツールです。人間の指示を翻訳して、カーネルへ伝えてくれる通訳者のようなものです。

**代表的なシェルを2つ以上挙げてください**
bash、sh、zsh、csh、ksh



引用記事:

https://hnavi.co.jp/knowledge/blog/linux-merit/

https://www.rstone-jp.com/column/110007/

## 今回の記事を書く上で参考にさせていただいた記事
https://qiita.com/musakamama3838/items/69e33790d03d51b2dd31#%E3%81%8A%E3%82%8F%E3%82%8A%E3%81%AB

https://qiita.com/soichiro-saeki/items/b2948a83c4286baf1f91

https://qiita.com/U-MA/items/996ae933ae94c5711883
Polygonのテストネット利用(接続)で2024年5月以降注意すること


この記事では、2024年6月にPolygonのテストネットを
利用（接続）する際に筆者が躓いた点
についてまとめます。

**結論：テストネットMumbaiは、2024年4月に運用が停止されています。**
https://mumbai.polygonscan.com/
→最新のブロック更新が2024年4月から止まっています。

**対応：新たに運用され始めた「Amoy」を利用する**

# Polygon-testnetと調べると Mumbaiの利用した記事の散見
2024年6月現在、Google検索でPolygonの利用方法を調べると
テストネット「Munbai[Chain ID:80001]」を利用した記事が散見されます。
https://ai-china.hatenablog.com/entry/2022/02/03/130000
https://note.com/yutakikuchi/n/n2da9d00772fe
https://seoblo.org/metamask-add-testnet/#Munbai
https://qiita.com/tawago/items/e7048288ab3c810656a2


# 新たなテストネット「Amoy」の運用

テストネットのMumbaiが運用停止した経緯や「Amoy」の詳細について等は以下に記事を参考にしてください。

https://www.neweconomy.jp/posts/364244

以下の記事でAmoyをMetamaskでネットワークを追加する方法が開設されています。

https://note.com/standenglish/n/n5212eabc40ad

以下のサイトでMetamaskにネットワーク追加するための様々なBCの情報(Chain ID等)を検索して簡単に接続することができます。

https://chainlist.wtf/
SPAのすすめ

## SPAとは
- Single Page Application
- コンテンツ内の更新にページ全体の更新を伴わない
- データをAJAXでやり取りし、コンテンツの更新はブラウザ上で行う
- 最近はごく当たり前の作り
　いいね！したら画面全体がリフレッシュするとかなしですよね？

----
## 利点（1/2）
- 通信が最小限
- データと見た目の分離は・・・どこでHTMLを組み立てるかの違いでしかない！
- 関心事の分離：Webの画面には複数の関心事が同居していることがほとんど
　関係ない箇所まで再描画するのはコストが高い

----
## 利点（2/2）
- ユーザにとって使い勝手のよいUIが実現可能：Googleマップ／Gmailの衝撃
- POSTリクエストのリロードがなくなる
- キャッシュ戦略：静的ファイルはCDNを使って高速に配信できる

----
## 欠点
- APIのエンドポイントが多くなりがち
- APIの柔軟性の限界：通信量削減のために必要な列だけ取得したい、というのが難しい
- 作るのが難しい？
　→　考え方をシフトすればいける！／フロントエンドフレームワークは必須！

※GraphQLという解決策！

----
## どうやって作るか
- フロントエンドフレームワークは必須（特にHTMLを組み立てる部分）
- Virtual DOM
AWS Cloud9環境で mailpit を使う方法(Laravel10+SES+mailpit)

## 前提

* PHPフレームワークはLaravel10を使用する
* PHPバージョンは8.2である
* メールサーバは AWS SESを使用する
    * SESのセットアップは事前に完了しているものとする
* メール送信ライブラリは mailpit を使用する

## AWS SDKをインストール(SES Clientを使用するため)

```bash
cd /path/to/project/
composer require aws/aws-sdk-php:~3.0
```

## .env の設定

```:.env
MAIL_MAILER=smtp
#MAIL_HOST=mailpit
# MAIL_HOST を localhost にすることを忘れないように
MAIL_HOST=localhost
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS="noreply@example.com"
MAIL_FROM_NAME="${APP_NAME}"

# SESのアクセスキーを入力
AWS_ACCESS_KEY_ID=AK...6M
# SESのシークレットキーを入力
AWS_SECRET_ACCESS_KEY=PS...Qm
# 必要であればリージョンを適切なものに変更すること
AWS_DEFAULT_REGION=ap-northeast-1
#AWS_BUCKET=
#AWS_USE_PATH_STYLE_ENDPOINT=false
```

## mailpitをインストール

```bash
cd ~/environment/
# ライブラリをダウンロード
wget https://github.com/axllent/mailpit/releases/download/v1.18.4/mailpit-linux-amd64.tar.gz
# 解凍する
tar xzf mailpit-linux-amd64.tar.gz 
# 実行権限を付与
chmod +x mailpit
# PATHを通す
sudo mv mailpit /usr/local/bin/

# メールサーバのプロトコルをEC2のセキュリティグループに追加する
MY_INSTANCE_ID=$(curl http://169.254.169.254/latest/meta-data/instance-id) # Get the ID of the instance for the environment, and store it temporarily.
MY_SECURITY_GROUP_ID=$(aws ec2 describe-instances --instance-id $MY_INSTANCE_ID --query 'Reservations[].Instances[0].SecurityGroups[0].GroupId' --output text) # Get the ID of the security group associated with the instance, and store it temporarily.
# ポート 8025 HTTP(Mailpitの管理画面インターフェース)
aws ec2 authorize-security-group-ingress --group-id $MY_SECURITY_GROUP_ID --protocol tcp --port 8025 --cidr 0.0.0.0/0
# ポート 1025 SMTP(MailpitのSMTPサーバー)
aws ec2 authorize-security-group-ingress --group-id $MY_SECURITY_GROUP_ID --protocol tcp --port 1025 --cidr 0.0.0.0/0
```

## メールクライアントを起動する

```
# メールサーバを起動する(バックグラウンド実行するために & を付ける)
# Mailpitの管理画面は以下のURLからアクセスできる
# http://localhost:8025/ 
mailpit &

# メールサーバを終了したい場合、fg でフォアグラウンドにした後、Ctrl+Cでプロセス終了できる
#fg
```
【Bash】trap、デバッグ、Cron 作成 について

## はじめに

今回は trap、デバッグ、Cron 作成について触れます。



## trap の利用

### trap とは

シェルスクリプトがシグナルを受け取った場合に実行される処理を trap で定義することができる。

`trap 関数名(またはコマンド名) シグナル名` と記述する。

\*) シグナル名はシグナル番号に置き換えることも可能だが、可読性の観点で非推奨
\*) 多くはシェルの終了時の処理を記述する

| シグナル番号 | シグナル名 | 意味 |
|:-|:-|:-|
| 1 | HUP | 制御端末の切断 |
| 2 | INT | 割り込み（ ctrl + c ） |
| 15 | TERM | プロセスの終了命令 |

```bash:例
# 2（ ctrl + c ）で終了した場合 print 'HELLO WORLD' が実行される
trap "print 'HELLO WORLD'" INT

print() {
    echo ${1}
    # exit する必要がある
    exit
}
```

```bash:例（ファイルを削除する処理を trap で定義する）
trap "remove_tmp_file" HUP INT TERM

remove_tmp_file() {
    rm ./tmp_file
    # exit する必要がある
    exit
}

touch tmp_file
```


## デバッグモード

### set -x、set +x

set -x と set +x を用いることで、シェルスクリプトの実行をデバッグモードにしたり、デバッグモードから元に戻すことができる。

デバッグモードにすることで、ファイルがどの行を実行しているのか **標準出力される** ため、エラー解析には便利である。

ただし処理速度は若干遅くなるため、本番環境では外す必要がある。

```bash:例
set -x # ここからデバッグモード
:
echo "Hello"
:
echo +x # デバッグモード終了
```


### #!/bin/bash -x

ファイルの先頭に -x をつけることで、ファイル全体をデバッグモードにする。
この場合も set +x でデバッグモードを解除できる。

```bash:例
#!/bin/bash -x

:
set +x # デバッグモード終了
```


## Cron の作成

### Cron とは

Cron とは、ユーザが直接実行せずとも決められた時間にコマンドやスクリプトを実行する機能である。

crond というデーモンプロセスが登録された Cron をチェックして、時間になれば処理を行う。


### Cron の設定ファイル

Cron の設定ファイルは、各時刻ごとに実行されるよう以下のフォーマットで記述する。

```bash:フォーマット
# [分 (0-59)] [時間 (0-23)] [日にち (1-31)] [月 (1-12)] [曜日 (0-6)] [コマンド]

# 3月15日22時34分に command が実行される
34 22 15 3 * command

# 毎日、2時 - 7時の0分に command が実行される
0 2-7 * * * command
```

| cron の設定で利用する記号 | 意味 |
|:-|:-|
| * | 全時間を表す（ * : 0 時から 23 時まで ） |
| - | 幅を表す（ 0-9 : 0 時から 9 時まで ） |
| , | リストを表す（ 0, 3, 14 : 0, 3, 14時 ） |
| / | 間隔を表す（ */3 : 0, 3, 6, 9, ... , 21時） |


##### /etc/cron.{hourly,daily,weekly,monthly}/

毎時、毎日、毎週、毎月に実行されるジョブを格納するディレクトリ

| パス | ジョブ |
|:-|:-|
| /etc/cron.hourly/ | 毎時実行されるジョブを格納 |
| /etc/cron.daily/ | 毎日実行されるジョブを格納 |
| /etc/cron.weekly | 毎週実行されるジョブを格納 |
| /etc/cron.monthly | 毎月実行されるジョブを格納 |


##### /etc/cron.d/

いつ実行するのか設定を記述したファイルを格納するディレクトリ

```bash:例
# rootユーザで実行
# run-parts: ディレクトリ内のスクリプトを全て実行する
01 * * * * root run-parts /etc/cron.hourly
```


##### /etc/crontab

毎時、毎日、毎週、毎月に実行されるジョブを記載するファイル

```text:例
[ec2-user@localhost ~]$ vim /etc/crontab

# * * * * * user-name command to be executed
*/1 * * * * root /etc/cron.hourly/1cron
```

### crontab コマンド

各ユーザの cron 設定用のファイル /var/spool/cron/ を編集・表示するコマンド

| オプション | 意味 |
|:-|:-|
| -u | ユーザ名の指定 |
| -l | cron の設定を表示 |
| -e | cron を設定 |

```text:例
[ec2-user@localhost ~]$ crontab -l
0 * 15 3 * command/script
[ec2-user@localhost ~]$ crontab -e 
```


# おわりに

どれも使ったことがない機能で新鮮〜
プロパティの中身が決まっていない抽象的な親クラスのテストを行う方法

親クラスにはプロパティ名だけ定義しておいて値は子クラスで定義したい、というパターンがありました。

例えばEntityオブジェクトを詰め込んでcollectionにするためのクラスがあるとして、

```php
class EntityCollection {
	protected $entityName;

	public function __construct(array $entities)
	{
		foreach ($entities as $entity) {
			if (!($entity instanceof $this->entityName)) {
				throw new Exception();
			}
		}
	}

	public function getById($id)
	{
		// $idで指定したentityを一つ取得する
	}
}

class UserEntityCollection {
	protected $entityName = UserEntity::class;
}
```

`EntityCollection`のテストをしたいが親クラス自体はentityが定まっていないのでこのままではテストができません。
かと言って`$entityName`をpublicにすると値を上書きできてしまうのでやりたくありません。

そこでテスト内で**親クラスを継承した無名クラス**を作ります。

```php
class EntityCollectionTest
{
	public function testGetById()
	{
		$userEntity = new UserEntity(); // ここは任意のEntityを使用する (1)
		$testClass = new class($userEntity) extends EntityCollection {
			$entityName = UserEntity::class; // (1) のクラス名を指定
		}
	}
}

(new EntityCollectionTest)->testGetById();
```

こうすればテストの時だけ好きな`entityName`を定義できます。
「ん」のしょうもない話


## しょうもない話

「ん」は「xn」という入力でも変換できる。

そのため、
「っん」
は
「xtunn」
ではなく
「xxn」
と入力したほうが速い。

タイピングの0.1秒すら惜しい人は是非試してほしい。
PHP 8.3でprepared statementのパフォーマンス測定

## 概要

その昔，PHPでPDOのprepared statementの数が多くなるとパフォーマンスが劣化するという問題があったらしい．

現在のPHPではどうなのか計測してみました．

## 計測

計測に使用したコードは以下で紹介されているコードをそのまま使用させていただきました．
https://qiita.com/kmotoki/items/7a0df427c8c2217ebbb4

### 検証環境

- ローカルマシン：M1 MacBook Pro
- Docker
    - PHP 8.3
    - MySQL 8.4


### 計測結果



| bulk count | emulate prepare | use prepare |
| --- | --- | --- |
| 2 |	1.8224699258804	| 1.6240870475769 |
|4|	0.91341543197632	|0.8638001203537|
|8	|0.57537820339203|	0.51411798000336|
|16|	0.39952325820923	|0.34663615226746|
|32	|0.31264271736145	|0.26628122329712|
|64	|0.26280272006989	|0.22010819911957|
|128|	0.24218599796295|	0.21109230518341|
|256|	0.22658925056458	|0.19329233169556|
|512|	0.21807780265808|	0.18028399944305|
|1024	|0.21493134498596|	0.18895649909973|
|2048	|0.21120524406433|	0.17133178710937|
|4096	|0.20003170967102|	0.17415330410004|
|8192|	0.20919830799103|	0.18049108982086|
|16384|	0.25638961791992|	0.19883470535278|
|32768|	0.22561557292938|	0.23696279525757|

PHP 5.3であったようなbulk countが1024から劣化している様子もなくuse prepareの方が、パフォーマンスが出ていることがわかりました．
robloxでassistant その107

# 概要
robloxでassistantやってみた。
練習問題やってみた。

# 練習問題
スクリプトだけで、Eキーで消せるパーツを作れ。

# 手順
- ReplicatedFirstに、LocalScriptを追加。
- スクリプトを書く。

```

local part = Instance.new("Part", workspace)
part.Position = Vector3.new(0, 1, -10)
local prompt = Instance.new("ProximityPrompt", part)
prompt.ActionText = "消す"
prompt.UIOffset = Vector2.new(0, -20)
prompt.KeyboardKeyCode = Enum.KeyCode.E
prompt.ObjectText = "このパーツ"
prompt.Enabled = true
prompt.Triggered:Connect(function(player)
	part:Destroy()
end)


```

# 写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/38e78b33-4a5f-0983-ca4a-c0783538d93e.png)


以上。
【ChatGPT＋DALL-E3】隠し絵を描こう（納得いかず）


　どうも、カーブミラーです。

　今回は、隠し絵を描こう、という話。でも、納得いきません。

:::note info
本記事は、ChatGPT（有料版）
＋DALL-E3で行なっております。
画像はあります。　あしからず。
:::

　まずは、
　　先日（2024/06/04）の
　　　ChatGPTの大規模障害です。

　APIやLabsでの使用は
　　問題なかったそうです。
　　　確かに、そっち系の人からの
　　　　悲鳴はなかったねぇ。

　なんと、
　　“障害は日本時間3日23時15分に
　　　始まり、同時間5日2時1分に
　　　　解決”とあるので、
　　　　　深夜のものは、3時間ほど
　　　　　　だったわけだ。

　昼間も入れれば、
　　5時間半。
　　　仕事にならんわねぇ。

　ちなみに
　　下記を参照しました。
[ChatGPT、一時利用不能に　「仕事できない」と悲鳴](https://ascii.jp/elem/000/004/202/4202521/)
***
　さて、本題です。

　“隠し絵”は
　　ご存知でしょうか。
　　　そこからいきましょう。
　　　　ちなみにGPT-4です。
***
***user***
“隠し絵”をご存知ですか？
知らなければ知らないと答えてください。

***ChatGPT***
はい、「隠し絵」を知っています。隠し絵は、画像や絵の中に隠されたオブジェクトや図形を見つける遊びやアートです。多くの場合、隠し絵は視覚的な錯覚を利用して、一見しただけでは気づかないように巧妙に隠されています。

***user***
その一例を描画できますか？
できるならDALL-E3に指示してください

***ChatGPT***
![1717640853050.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457238/5e7c0d2f-23d4-ef10-bb4e-c8dae8cc85e3.jpeg)

***user***
木々を鬱蒼と茂る森にしてください

***ChatGPT***
![1717640865604.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457238/79d57be5-2401-7125-3d84-8412e73c23b8.jpeg)

***user***
熊のシルエットがまわりに同化しているようにして

***ChatGPT***
![1717640877276.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457238/cfdcd5be-dcf5-10a9-51ef-a40747367c15.jpeg)

***user***
シルエットをまわりと同じ色にして

***ChatGPT***
（熊のシルエットの中に森。背景は白）

***user***
背景とシルエットは同色にして

***ChatGPT***
（同じ）

***user***
これでは、シルエットの中に、森がある状態です。森の中にシルエットを置いてください。なお、森とシルエットの境目は少ない。

***ChatGPT***
（背景が緑っぽくなっただけ）
***
　ここからは
　　何を指示しても
　　　似たりよったりの
　　　　画像にしかならず。

　それで
　　指示を変えます。
***
***user***
背景とシルエットの両方を緑に染めて

***ChatGPT***
![1717640885772.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457238/92d1c8f2-3b5e-0855-416b-03ec8fd2d3ae.jpeg)
***
　よくなった？とは
　　言えませんねぇ。

　“シルエット”という言葉が
　　邪魔している気がします。

　とはいえ、
　　制限が来てしまいました。

　う〜ん、
　　なんか手が
　　　ありそうなんですけどねぇ。

　みなさんの
　　作品制作の糧に
　　　なれば、幸いです。

　今回は、ここまで。
Juliaをインストールする（ただし、Jupyter Notebookを使わずに：VSCode, Win/Mac/Linux共通）

MATLABユーザーがJuliaをインストールする。
# 背景
MATLABが遅い。Pythonは嫌い。
→Juliaという言語がいいらしい。

https://www.geidai.ac.jp/~marui/julialang/why_we_created_julia/index.html

MATLABみたいに、統合した環境でやりたい。Jupyter Notebookみたいなブラウザベースのは好きじゃない。できれば、vscodeでやりたい。


# インストール
### Windows:
Wingetがインストールされていることを前提とする。
powershellから以下を実行
```powershell.ps1
> winget install JuliaLang.Julia
> ls ~\AppData\Local\Programs\Julia-*\bin\julia.exe" | select Directory
```
で表示されたディレクトリを、コピーしておく。PATHに追加する。
```powershell.ps1
> sysdm.cpl
```
「ユーザー環境変数」の「PATH」に、「新規」で先ほどのディレクトリ（```C:\****```）を貼り付ける。
powershellを再起動する。

### Mac:
Homebrewがインストールされていることを前提とする。されてなければ、先にターミナルから
```terminal.sh
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```
を先に実行しておくこと。その後、
```terminal.sh
$ brew install julia
```

### Linux:
Fedoraの例。各パッケージマネージャーの構文にあわせる。
```terminal.bash
$ sudo dnf install julia
```

以降、OSにかかわらず共通。
# Juliaの起動
ターミナルから起動してみる。
```
Mac-Studio:~ user$ julia
               _
   _       _ _(_)_     |  Documentation: https://docs.julialang.org
  (_)     | (_) (_)    |
   _ _   _| |_  __ _   |  Type "?" for help, "]?" for Pkg help.
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 1.10.3 (2024-04-30)
 _/ |\__'_|_|_|\__'_|  |  Built by Homebrew (v1.10.3)
|__/                   |

julia> exit()
```

# VSCodeプラグインの追加
VSCodeは先にインストールしておくこと。公式から落とせばいい

https://code.visualstudio.com/download

左ツールバーの拡張機能（□4個のボタン）から、「Julia」と検索してインストールする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1075437/e9a1d910-2a85-1cb6-835c-cb95b5c61d49.png)

# 動作テスト
適当なフォルダをcodeで開く
```terminal.sh
mkdir ~/Documents/juliatest
cd ~/Documents/juliatest
code .
```
```test.jl```を左から作成して、例えば、以下のようにして右上の再生ボタン（実行）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1075437/e5408c3e-5d6c-c021-e71c-bbd98ccea6e4.png)

怒られる。
```output.log
~~~
ERROR: ArgumentError: Package Plots not found in current path.
- Run `import Pkg; Pkg.add("Plots")` to install the Plots package.
Stacktrace:
 ~~~
```
パッケージPlotsをインストールしてみる。ここに詳しい
https://qiita.com/skiing_LAL10/items/0c0132a34629fbc8a91f
```下のターミナル.jl
julia > ]
(@v1.10) pkg> add Plots
~~~
(@v1.10) pkg> (デリートキー）
julia >
```
もう一度実行してみる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1075437/92a8a876-ae77-0fc9-81a4-400528150ade.png)
古いMac(Mid2013)でp5やoFを動かす

以前先輩が使っていた、MacBook Air 11インチ(Mid2013)が出てきたので、何かに使えないかと開発環境を整えてみた。主にクリエイティブコーディングやフィジカルコンピューティングでマシンを使用する事が多く、その周辺環境を構築してたらProcessingやoepnFrameworksが動いたので、以下に使えそうな用途をメモしておく。


## Google Chrome (125.0)
まず、Chromeブラウザが使えれば勝ちである。p5js webEditorやopenProcessing、その他webエディタが使えるので、これだけでも良い。UIFLOWも使えるのでM5Stackを使った開発もできる（M5Bunnerも入った）。ThinkerCADで3Dモデル制作も出来る。

https://editor.p5js.org/

https://openprocessing.org/

https://flow.m5stack.com/

https://www.tinkercad.com/dashboard


## VSCode (1.87.2)
IDEはVSCodeが入れば勝ちである。Web周りの開発はこれで何とかなる。

https://code.visualstudio.com/


##  Processing (4.3)
最新のProcessingが入るのは嬉しい。重たい処理などは遅くなりそうだが、まだまだ使えそう。Videoライブラリも使えたので、クリエイティブコーディングや簡単なインタラクションになら使えそう。

https://processing.org/


## Arduino IDE (2.3)
Arduino R4 MinimaやM5Stack系も使えたので勝ちである。
ProcessingとArduinoが使えれば、結構色々出来るので嬉しい。 

https://www.arduino.cc/


## **openFrameworks 0.12**
一番嬉しいのはoFが動いた事である。OSが上がらないのでXcodeがインストール出来なく詰みかと思うが、なんと今はVSCodeで開発が出来るようだ。

https://openframeworks.cc/setup/vscode/

https://zenn.dev/yui_szk/articles/4b7e88b6c88ebb


## 結論
まだまだ古いMacも使えそうである。充電の減りや処理速度は気になるが、用途によってはサブ機として取っておいても良い気がする。何より背面が光るのかっこいい！
Blenderで作成したモデルをUnityにImportする基本事項

# はじめに
　Unityで使用するモデルを作成する際，いろいろな方法が使われると思われますが，今回はBlenderからFBX型としてExportする状況を考えます．また，この内容は初心者である私がモデルを取り込む際のワークフローとして現時点で最適と考えている内容であるため，あまりよくない方法を使っている可能性があることをご了承ください．

 # １．モデルの名前は半角英数字
 あたり前のことかもしれませんが，ここで私は一度躓きました．これはビルドを行う際にエラーが出るので早期の段階で気づかないのがつらいです．これはモデルだけに限らずすべての要素で守らなければいけないことのため，気を付けてください．また，対処法として，私はこのミスのあとBlenderの日本語化をなくしました．

 # ２．transformの適応
 ### 2.1 BlenderでのTransformの適用
 　Blenderで作成したモデルは回転や移動，拡大縮小が加わっている場合が多いです．そして，このままUnityにImportするとこの変形がUnityでも適用されてしまいます．例えば，スケールが(10, 10, 10)のモデルをUnityで使用するとUnityでもスケールが(10, 10, 10)になってしまいます．しかし，おそらくほとんどの場合では，これらの変形が加えられたモデルを標準の状態として扱いたいはずだと思います．そのため，BlenderにおいてCtrl+AでApply Menuを開き，All transformsを選択し変形を適用します．こうすることで，Blender上ではすべてのtransformが標準状態となります．しかし，Unityでも標準状態にするには，さらに次の操作が必要になります．
  
### 2.2 exportする際の設定
　以上の操作を行うことでBlenderでのtransformは適用され，標準状態が正確に設定されます．しかし，BlenderとUnityのtransformでは，少し違いがあります．例えば，Blenderにおけるスケール(1, 1, 1)はUnityにおける(100, 100, 100)に対応します．これは少し都合が悪いです．そこでExportする際に下図のように[Apply Transform]を適用する必要があります．これによって，Blenderにおけるスケール(1, 1, 1)がUnityにおける(1, 1, 1)に対応するようになります．これによって，モデルを標準状態として読み込むことができます．
 
![スクリーンショット (246).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3759393/35032689-91ad-c3eb-2811-ddee86f9a3e5.png)


 # ３．面の表裏
 　Blenderでは面の表裏は細分化などを行わない限り，意識することはないかもしれませんが外部への読み出しのためには，しっかり意識する必要があります．Unityでは面が裏になっていると下図のように面が透明になってしまします．そのため，Blenderにおいてすべての面を表向きにする必要があります．
  ![スクリーンショット (243).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3759393/26a1eea1-f749-0b8b-c6bf-4ee3be7b60b4.png)

  　面をすべて表向きにするため，まず面の表裏を表示してみます．これは下図のようにViewPort Overlaysのメニューを開きFaceOrientationにチェックをいれることでみることができます．ここでは，左側の面が裏になってしまっていることがわかります．
   
  ![スクリーンショット (240).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3759393/5e355162-e745-a66c-f158-2c387de1d05d.png)
  　次に面を実際に表向きにします．そのためにはまず，表にしたい面を選択したあとAlt+nを押し，Normalsメニューを表示します．そこで，Recalculate Outsideを選択します．すると，目的の面が表になります．これによって，Unityでも正常に表示されます．
   
   ![スクリーンショット (244).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3759393/795b2371-ec82-a840-b956-0b0b9574793e.png)
   
  　ここでは丁寧な方法を述べましたが，実際にはCtrl+Aですべての面を選択したあとAlt+nからNormalsメニューを表示し，Recalculate Outsideを選択することですべての面を表とする方法で大抵の場合は解決します．
  
 # まとめ
　現時点で私が注意している点は以上です．また，今後続けていくなかで必要な点を見つけ次第更新していこうと思います．
ビルドフェーズの＄Action環境変数の一覧

ACTIONはXcodeのビルドプロセス中に設定される環境変数で、現在のビルドアクションを表します。以下に、一般的に使用される$ACTIONの値をいくつか示します：
build：プロジェクトまたはターゲットをビルドするアクション。
clean：ビルドプロダクトと中間ファイルを削除するアクション。
test：テストを実行するアクション。
analyze：静的解析を実行するアクション。
archive：アーカイブ（配布可能なビルド）を作成するアクション。
install：アプリケーションをデバイスまたはシミュレータにインストールするアクション。
installsrc：ソースコードを指定されたディレクトリにインストールするアクション。
installhdrs：ヘッダーファイルを指定されたディレクトリにインストールするアクション。
これらのアクションは、ビルドフェーズのスクリプト内でACTION変数をチェックすることで、特定のアクションが実行されているときに特定のコードを実行する、といった条件付きの動作を実装するために使用されます。

indexbuildは通常、Xcodeのビルドプロセス中に設定されるACTION環境変数の一部としては公式には定義されていません。公式にはbuild、clean、test、analyze、archive、install、installsrc、installhdrsなどが定義されています。
ただし、カスタムのビルドフェーズやスクリプト内で独自のアクションを定義し、それを$ACTION変数として使用することは可能です。その場合、その独自のアクション（この場合はindexbuild）はそのスクリプト内でのみ意味を持ちます。
したがって、indexbuildがACTIONの値として使用されている場合、それはおそらくそのプロジェクト特有のカスタムアクションを表していると考えられます。その詳細な動作や目的については、そのプロジェクトのドキュメンテーションやソースコードを参照する必要があります。
Angular で Hello World を表示してみました。

プログラムの勉強ですが、今のところ挫折せずに諦めず頑張れています。
まだ、始めたばかりでと思うかも知れませんが、すぐに心が折れてしまう私にとって最初は肝心です。

今日も無理せず少し前進します。

#### １．環境を準備します。
:::note info
過去の記事で Angular アプリケーションを動かすところまでの環境を準備しています。
:::
・以下のリンクを参照してください。

https://qiita.com/monotoneboy/items/0c4cb59c99ba285ac9b5

##### １－１．コマンドプロンプトを開きます。

（アウトプット）
![1-1-1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798951/843b8ddc-0ddf-1baf-47dc-7620702a026d.png)

##### １－２．Angular アプリケーションのディレクトリに移動します。
・コマンドプロンプトで以下のコマンドを実行します。
`cd .\Angular\my-work`

（アウトプット）
![1-1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798951/ff85076d-fdc2-2ef1-9e41-8761d53c9e2a.png)

##### １－３．Angular アプリケーションを起動します。
・コマンドプロンプトで以下のコマンドを使用します。
`ng serve`

（アウトプット）
![1-2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798951/39bd2d19-3337-b66c-59a0-f15fd64efc74.png)

##### １－４．ブラウザで、Angular アプリケーションにアクセスします。
・以下のURLにアクセスします。
`http://localhost:4200/`

（アウトプット）
![1-3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798951/8ad9bfdd-c997-5a31-4c92-0668151dc56d.png)

準備完了です。

#### ２．Angular アプリケーションのファイル構成を確認します。

##### ２－１．my-work ディレクトリの直下に以下のファイルが存在します。
・エクスプローラで以下のディレクトリを参照します。
`C:\Users\user\Angular\my-work`

（アウトプット）
![2-1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798951/26b2e692-26e5-db4f-0b88-7cb47050f269.png)

##### ２－２．src ディレクトリの直下に以下のファイルが存在します。
・エクスプローラで以下のディレクトリを参照します。
`C:\Users\user\Angular\my-work\src`

（アウトプット）
![2-2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798951/736d34e0-c6a6-94cf-a61d-1a8ce6ffa963.png)

##### ２－３．app ディレクトリの直下に以下のファイルが存在します。
・エクスプローラで以下のディレクトリを参照します。
`C:\Users\user\Angular\my-work\src\app`

（アウトプット）
![2-3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798951/72bb9e0e-fd74-ea80-6eb9-76581b43569d.png)

#### ３．プログラムを更新します。

##### ３－１．タイトルを更新します。
・以下のファイルを更新します。
`C:\Users\user\Angular\my-work\src\index.html`

```diff
<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
-  <title>MyWork</title>
+  <title>Hello World</title>
  <base href="/">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="icon" type="image/x-icon" href="favicon.ico">
</head>
<body>
  <app-root></app-root>
</body>
</html>
```

（アウトプット）
![3-1-1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798951/cc9a4971-5f77-a81b-9ba2-47401cc8c186.png)

##### ３－２．Hello world を表示するように更新します。
・以下のファイルを更新します。
`C:\Users\user\Angular\my-work\src\app\app.component.ts`

```diff
import { Component } from '@angular/core';
import { RouterOutlet } from '@angular/router';

@Component({
  selector: 'app-root',
  standalone: true,
  imports: [RouterOutlet],
-  templateUrl: './app.component.html',
-  styleUrl: './app.component.css'
+  template: '<h1>Hello world</h1>'
})
export class AppComponent {
-  title = 'my-work';
}
```

（アウトプット）
![3-2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798951/b12877ec-ef10-e8a3-137c-1b3b3204b143.png)

無事に思ったとおりになりました。

どんどん楽しくなってきました。
pyQGISでQGISにインストール済みのプラグインのリストを取得する

# 以下を実行
```
qgis.utils.plugins.keys()
```

# 取得できた

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61492/eedd67de-8bc1-8aa5-6093-ca917a73845d.png)


終わり
わたしの頭の中のRubyとJavaScript


RubyとJavaScriptの学習を進めているうちに

『そもそも、Rubyってなんだっけ❓』　『JavaScriptとなにが違うの❓』
という疑問が湧き出てきたので、アウトプット用として記事を作成しました。



# RubyとJavaScript


まず、プログラミング言語には２種類あります。
**コンパイル言語**と**インタプリンタ言語**。

簡潔にいうと、、、

**インタプリタ言語**(Ruby・JavaScript・Pythonなど)は、コードを実行する際に1行ずつ機械語に翻訳していく言語。

**コンパイル言語**(Java・C++・Objective-C・Go・swiftなど)は、ソースコードを1行1行ではなく一括で機械語に翻訳して、実行していく方式の言語


引用元に私の同期の方がわかりやすく記事にまとめているので参考にして見てください！

引用元[：インタプリタ言語とコンパイル言語](https://qiita.com/Shinono/items/2f52d300f1b7b2f54b9a
)


現在学習中の言語、**Ruby**と**JavaScript**はインタプリタ言語でした。
ここで、JavaScriptとRubyの違いをざっくりだけどまとめてみることに！


![スクリーンショット 2024-06-08 18.47.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3788430/6d1b7625-1466-c692-4298-f236b0badd18.png)







# JavaScriptとRubyのコードの違いについて

### - 基本的な構文 - 

**[JavaScript]**
```
function sayHello() {
    console.log("Hello, World!");
}
sayHello();
```


・ " function " キーワードを使用して関数を定義。
・ " console.log " を使ってコンソールに出力。

**[Ruby]**
```
def say_hello
  puts "Hello, World!"
end

say_hello
```
・ " def "キーワードを使用してメソッドを定義。
・ " puts " を使ってコンソールに出力。

### - 変数の宣言 - 
**[JavaScript]**

```
let message = "Hello, World!";
console.log(message);
```

・let、const、varキーワードを使用して変数を宣言。
・変数・関数共に基本「キャメルケース」で書く。

　[ 例 ]   　　function 　createUserAccount(引数)

 
**[Ruby]**
```
message = "Hello, World!"
puts messag
```



・変数の宣言に特別なキーワードは必要なく、直接名前を付けて値を代入。

（※命名規則として英字、数字、_(アンダースコア)を使う。ただし、先頭に数字や大文字を使用することはできない。）

・英字はすべて小文字で書き、2単語以上をつなげるときは_を間にいれる。このような表記のことを「スネークケース」という。
ヘビみたいな　ーー__ーー　形だからスネークケースらしい


　　　[　例　］　　name user_name



## 現れたRubyのオブジェクト指向
Rubyのテキストを進めつつ、やっとJavaScriptに慣れてきたなあと
JavaScriptのオブジェクトに浸っていたら

突如現れた、**Rubyのオブジェクト指向**。


そもそも、オブジェクト指向ってなんだ！って調べてみると、、、

**オブジェクト指向**とは、
「処理を部品化し、それらを組み合わせることで1つのプログラムを構築していくやり方」のことらしいです。

以下参照
引用元 [:オブジェクト指向とは？具体例を交えてわかりやすく解説](https://techmania.jp/blog/programming0004/#outline__1_1)





[**JavaScript**オブジェクト]
・JSのオブジェクトの構造はRubyでいうハッシュのようなもの。
・JSで扱われるデータであるオブジェクトは、なんらかの組み込みコンストラクタから生成され、そのプロパティやメソッドを使用できる。


[**Ruby**オブジェクト]

・Rubyの世界ではすべてのデータがオブジェクト。
この時扱っているデータという数値３や、"hello EK"の文字列などもオブジェクトになる。
そして、このオブジェクトにはそれぞれ所属先があり、
例えば３は整数だから、整数オブジェクト（Integerクラス）、
文字列だったら（Stringクラス)。その所属先のことを**クラス**という。
![スクリーンショット 2024-05-24 14.17.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3788430/e7cd5fbb-5332-39aa-6981-81e069f50431.png)







   

## 最後に、、、

ここまで基本的なことを書いてみました。
ただ今、学習しているRubyを深掘りしていきたいので
次回の記事ではRubyのメソッドや使い方をアウトプットしていけたらなと思います！




まだまだ、改善の余地はありますので、指摘などご意見ください！！！
Rye https://rye.astral.sh/


Rye とは? Pyenv のような Pipenv のような Poetry のようなものらしい。

## インストール

brew では環境変数の設定がうまくいかなかったので、ドキュメント通りインストーラスクリプトを使いました。このようにインストールし直す時は ~/.rye も消さないと古いリンクが残って面倒な事になるので注意。

```
brew install rye
curl -sSf https://rye.astral.sh/get | bash
全部 yes
echo 'source "$HOME/.rye/env"' >> ~/.zprofile
which python
xxx/.rye/shims/python
```

インストールして環境変数を設定すると、python コマンドは ~/.rye 以下の物を参照するようになります。つまり、rye は python コマンドのバージョンを管理する pyenv と、python で利用するライブラリを管理する venv / pipenv / poetry の両方の役割を果たします。

## パッケージの管理

rye では、パッケージはプロジェクトの中の .venv に閉じてインストールされます。

pyproject.toml をもとに環境を更新する。

    rye sync

パッケージを project.toml の project.dependencies に追加して環境を更新する。

    rye add パッケージ

パッケージを project.toml の tool.rye.dev-dependencies に追加して環境を更新する。

    rye add --dev パッケージ

rye add でインストールしたコマンドを実行する。

    rye run コマンド

## pyenv との関係

rye は pyenv と同様に利用する python のバージョンを .python-version ファイルから判別します。rye と pyenv の動作はよく似ていますが、ディレクトリ構成をみると互換性は無いようです。プロジェクトの python バージョンを指定する方法は以下の通り:

    rye pin バージョン

注意!: rye を入れたら PATH から `$HOME/.pyenv/shims` を消した方がいいです。rye と pyenv の共存も可能なようですが、VSCode が混乱して困りました。

## venv との関係

rye は venv のラッパーとして動くので、rye add したコマンドにパスを通すには activate しても良いです。

    . .venv/bin/activate

venv から抜ける

    deactivate

## 参考

* [Poetry - Pipenv の代替 #Python - Qiita](https://qiita.com/propella/items/28f2c83d1e50891b6a6b)
* [python, pipenv, pyenv, virtualenv, pip, conda #Python - Qiita](https://qiita.com/propella/items/247beb6be15bdef66ecc)
Git 切るブランチを間違えた時にあとから変更する方法メモ

# はじめに
developブランチから新しいブランチを作成して、あとからmasterに直接マージするものだったと気付いて、masterから切ったことにしたくなりました。
GithubCopilotに教えてもらったコマンドがいい感じに動いたのでそのメモです。

# 手順
developから切ったブランチをfeature,これをmasterブランチから切ったことにしたい体で手順を書いていきます。

## ブランチの根本を入れ替えたいブランチにチェックアウト

```
git checkout feature
```

## リベース

```
git fetch -p
git rebase --onto origin/master origin/develop
```

:::note info
指定commitIdから先をmasterのブランチに付け替える場合はこの様になります。
(^をつけることで指定のcommitIdも含めます)
```
git rebase --onto origin/master [指定commitId]^
```
:::

## リベース前にpush済みの場合はforce push

```
git push origin feature -f
```
ミーアキャットでもわかるLinuxコマンド操作

## :white_sun_small_cloud:  はじめに... :rabbit:
こんにちは！新卒１年目の大澤です！
この記事を開いていただきありがとうございます！
私は先日、社内の研修が終わり、今現在は７月から参画するプロジェクトに向けてITの知識や技術を身につけるために日々トレーニングをしています！
そこで、私が最近学習したIT知識は、Linuxのコマンドです！☆彡

今回はLinuxのコマンド操作について一緒に学びましょう～
それでは、一緒にLinuxのコマンドの勉強タイムに入ります！
よろしくおねがいしますZ-('ω')✯

## :hatching_chick: Linuxとは..? :four_leaf_clover: ##
「Linux」とは、WindowsやMacOSと同じオペレーティングシステム(OS)のことをいいます。特徴としては、無料・安全・安定・軽快である、といいところばかりです！!

## :elephant: ディストリビューションとは..? :sparkles:

「ディストリビューション」とは、Linuxを使いやすくするためにアプリケーションなどをパッケージして、すぐに使用できる状態にしたものです。例を挙げると、CentOS、redhat、debian、ubuntuなどがあります。みなさんがさまざまなディストリビューションを試して、自分に合ったものを見つけられるよう願っています˖✧

## :fork_and_knife: コマンドとは..? :peach:

「コマンド」とは、ユーザーがキーボードを通して、コンピュータやプログラムに対して命令する際に表示される文字列のことを指します。また、MS-DOSなど、Windowsのコマンドを入力するプログラムは「コマンドプロンプト」といわれています。

IT業界ではこの「コマンド」という言葉がたくさん飛び交っています！実は恥ずかしながら、私はこの業界に入るまでこの言葉を知りませんでした:sweat_drops:
社内研修のおかげで、今では「コマンド」というものがどういうもので、いつどこで扱うものであるか理解できています！

## :star2:基本的なLinuxコマンドをおぼえてみよう:snowman2:


**```sudo su -```**　rootユーザーになる

**```cd /testdir```**　testdirに移動

**```touch file2.txt```**　新しく「file2.txt」というファイルを作成

**```ls -l file2.txt```**　file2.txtのアクセス権限を確認

**```chmod 777 file2.txt```**　アクセス権限を変更

**```ls -l file2.txt```**　アクセス権限が変更できているかを再度確認

**```vi file2.txt```**　file2.txtの中身を確認

**```i```**　インサートモードに変更

**```Esc```**　インサートモード終了

**```:wq```**　保存して閉じる

**```vi file2.txt```**　file2.txtの中身を再確認

**```:q```**　保存しないで終了

**```ls -l```**　testdirにあるファイルを確認

**```rm testfile.txt```**　「testfile.txt」を削除
**```y```**

**```ls -l```**　「testfile.txt」が削除されたか確認

**```Exit```**　rootユーザーを抜ける

## :ribbon: おわりに... :hamster:

これにて、Linuxのコマンド学習を終わります！
みなさん、いかがでしたか～？？
私は社内研修ではじめてLinuxのコマンドについて初めて触れました。最初は「コマンドを自分の手で打つ」という作業が私自身、難しく感じ毎日パソコンとにらめっこをしていました。しかし、今回参画させていただくプロジェクト内で必要な技術だと知り、日々コマンドを打つ練習を重ね、少しずつではありますが、コマンドの操作に慣れてきました。

ぜひ、みなさんがこの記事を読んでLinuxのコマンドに興味を持ったり、理解することができていたら幸いです。
ここまで拙い文章を読んでいただきありがとうございました！！
では、また次回の記事でお会いしましょう～
タブレットで学ぶ！お小遣い管理術

この記事では、親子で楽しむお小遣い帳簿作りを紹介しています。GoogleスプレッドシートとGASを活用して、子どもがプログラミングの基礎を学びながらお金の管理を習得する方法が詳しく解説されています。手書きよりも効率的で視覚的に把握しやすい帳簿作りの手順や、スマホ・タブレットでの実行方法も必見です。

詳細はこちらでチェック: [小学生でもスプレッドシートアプリ～タブレットお小遣い管理術～]https://www.one-walker.net/allowance/