ブログ内検索

micro:bitページ
とにかく速いブログサイトを目指す

カテゴリー : プログラミング/page-5

SOY CMSマニュアルページ作成中

SOY CMSの開発秘話を投稿しました。→SOY CMSの開発秘話
 

自由を求めてオープンソースのネットショップパッケージへ。軌道に乗った頃に遭遇する問題について

/** Geminiが自動生成した概要 **/
SOY CMSを利用したネットショップ運営において、初期段階では自由度の高さがメリットとなるが、注文データの増加に伴い表示速度の低下という課題に直面する。これはGoogle検索ランキングにも影響する。記事では、表示速度低下の原因としてデータベース設計の冗長化、特にTEXTカラムの多用を指摘。SOY CMS/Shopでは不要な機能をインストールしない、外部データベースの活用などで冗長化を回避しているものの、注文データテーブルでのTEXTカラム使用は課題として残る。解決策として、サイト高速化とデータベースチューニングの必要性を提示している。具体的な対策は後述としているが、別記事ではPageSpeed Insightsのスコア99達成についても言及している。

 

D3.jsの4.X系で折れ線グラフを作成してみた

/** Geminiが自動生成した概要 **/
D3.jsを3系から4系にバージョンアップして折れ線グラフを作成した際の変更点についての記事です。4系ではscale関連の記述方法が変わり、`d3.scale.linear()`が`d3.scaleLinear()`に、`d3.scale.ordinal().rangePoints()`が`d3.scalePoint()`に変更されました。特に`scalePoint()`を見つけるのに苦労したようです。また、`d3.axis.svg.axis()`が`d3.axisBottom()`のようにシンプルになりました。これらの変更点に苦労しつつも、無事にグラフ作成できたことが記述されています。

 

端末を介せずNW.jsで動かせるようにする

/** Geminiが自動生成した概要 **/
NW.jsで端末を使わずデスクトップアプリを作る方法をWindowsで解説。NW.jsをダウンロード、解凍後、appフォルダを作成し、index.htmlとpackage.jsonを配置。nw.exeのショートカットを作成し、プロパティのリンク先に「半角スペース+app」を追加。ショートカット実行でindex.htmlの内容が表示され、端末不要でアプリとして起動できる。配布方法は割愛している。

 

NW.jsを試す

/** Geminiが自動生成した概要 **/
中学生向けプログラミング教室で、JavaScriptでアプリ制作をする生徒が出てきたため、デスクトップアプリ作成の選択肢としてNW.jsをUbuntuで試した。npmでnw.jsをインストール後、index.htmlとpackage.jsonを作成し、`npm start`で実行した結果、"Hello World!"とNode.jsのバージョンが表示された。ランチャーに登録したNW.jsアイコンからも同じ画面が起動できた。しかし、端末操作が必要なため、中学生には敷居が高いと判断し、他の方法を検討することにした。

 

SOY Shopの商品詳細ページで登録されている商品をランダムで表示する

/** Geminiが自動生成した概要 **/
SOY Shopの商品詳細ページで登録商品をランダム表示するPHPモジュールを作成する方法です。まず、管理画面でモジュールID「item.random」のPHPモジュールを作成し、指定のコードを記述します。このコードはSOY2DAOを使い、全商品、または指定カテゴリの商品をランダムに取得し、表示件数を制限するSQLを実行します。商品詳細ページテンプレートに`<!-- shop:module="item.random" -->`と`<!-- block:id="random_item_list" -->`を記述することで、ランダムに選ばれた商品が表示されます。カテゴリを指定するには、`$categoryId`変数にカテゴリIDを代入します。

 

シグモイド型BB肥料のシグモイドって何?

/** Geminiが自動生成した概要 **/
シグモイド曲線は、ある点付近で急速に傾斜が変わるグラフを表します。シグモイド型のBB肥料は、初期に緩やかに効き始め、その後一気に効果を発揮します。この特性は、長期的な効果が必要な作物の周年栽培に適しています。一方、リニア型のBB肥料は直線的な効き方をするため、一定期間にわたって持続的に効果を発揮します。BB肥料のシグモイド型とリニア型を適切に使い分けることで、作物の成長段階や栽培条件に応じた効率的な施肥が可能となります。

 

SOY2DAOでトランザクションを利用する

/** Geminiが自動生成した概要 **/
SOY2DAOではトランザクション処理が可能です。トランザクションを使用することで、複数のSQL文をまとめて実行し、処理に失敗した場合に一連の変更をすべて取り消すことができます。トランザクションを開始するにはbegin()メソッドを使用し、終了するにはcommit()メソッドを使用します。処理中にエラーが発生した場合は、successedフラグをfalseに設定し、処理をロールバックします。これにより、複数の処理が確実に実行されることが保証され、データの一貫性が維持されます。

 

プログラミングで素数を探してみよう

/** Geminiが自動生成した概要 **/
プログラミング教育の一環として、中学生にエラトステネスの篩を使わずに素数を求める課題を与えた。5が素数である理由を問うことで、生徒に思考過程を明確に説明させることを促した。生徒たちは、与えられた自然数以下の既知の素数で割り切れないことを確認することで素数判定ができることに気づき、JavaScriptでプログラムを実装した。2を初期素数として配列に格納し、3以上の自然数について、配列内の素数で割り切れるか確認し、割り切れなければ配列に追加していくことで、指定範囲内の素数を全て出力することに成功した。この経験を通して、プログラミング教育における論理的思考の重要性を再認識した。

 

葉は展開する毎に下の葉の位置から微妙にずれる

/** Geminiが自動生成した概要 **/
植物の葉は、光を効率的に受けるために、重なりを避けながら巧みに配置される。葉序と呼ばれる規則があり、例えばキャベツやハクサイは144度ずつ葉をつける2/5葉序を持つ。Pythonでこの配置を可視化すると、5枚で円を2周する様子がわかる。しかし、単純な144度回転では葉が重なってしまうため、実際には茎の捻れ(+5度)が加わり、新しい葉は古い葉を避けて展開する。このモデルを葉の数(N)を増やしてシミュレーションすると、N=20や30では実際のロゼット状の植物の配置に近づく。

 

オイラーの公式をガウス平面に表示してみた

/** Geminiが自動生成した概要 **/
オイラーの公式e^(θi) = cosθ + i*sinθ を検証するために、θに1〜360を代入し、Pythonでガウス平面にプロットした。右辺をプロットすると半径1の円が描かれた。同様に左辺e^(θi)をプロットしても同じ円が得られた。オイラーは右辺を4回微分することで左辺を発見したが、こうして視覚的に確認すると、その発見の凄さが改めて実感できる。

 

ガウス平面上に描写した模様を半分にスケーリングして回転させる

/** Geminiが自動生成した概要 **/
画像を複素数の集合としてガウス平面に描画し、π/4回転かつ1/2スケーリングを行う方法について記述されています。スケーリングは複素数を1/2倍、回転はe^(θi)を乗算することで実現します。θにπ/4を代入することで45度回転します。オイラーの公式e^(θi) = cosθ + i*sinθに基づき、Pythonの内包表記を用いて効率的に計算しています。最終的に、スケーリングと回転を組み合わせた処理を行い、目的の画像変換を実現しています。

 

Pythonの内包表記

/** Geminiが自動生成した概要 **/
生物学出身の筆者は数学を学び直す中で、行列プログラマーの練習問題1.4.10に挑戦した。画像は多重リストとして読み込まれ、各要素は色のタプルを持つ。課題は内包表記を用いて、明度120以下のピクセルを複素数に変換し、ガウス平面にプロットすることだった。初期の試行ではy軸が反転したため、画像の高さを利用してy座標を調整することで解決した。最終的な内包表記は`pts = {(x+(189 - y)*1j) for (y, d) in enumerate(data) for (x, v) in enumerate(d) if v[0] < 121}`となり、正しく画像をガウス平面にプロットできた。

 

成果を上げるネットショップのWeb担当者の傾向と今後のプログラミング教育で思うことについてお話をさせていただきました

/** Geminiが自動生成した概要 **/
京都大学で開催されたTera school主催の「オテラーニング・コモンズ~子どものプログラミング学習で」にて、ネットショップのWeb担当者の傾向とプログラミング教育の展望について講演を行いました。売上向上を実現するWeb担当者とそうでない担当者の違いを、過去のネットショップ導入事例に基づいて分析・発表。成功事例における担当者の特徴や、効果的なWebサイト運営のポイントを解説しました。さらに、今後のプログラミング教育において重要だと考える点についても言及。変化の激しいデジタル社会で活躍できる人材育成のための、必要なスキルや学習アプローチについて提言しました。講演では、実務経験に基づく具体的な事例や示唆を共有しました。

 

WordPressのウィジェットを作ってみた2

/** Geminiが自動生成した概要 **/
WordPressウィジェット作成の続きで、設定画面を追加する方法を解説。前回作成したウィジェットにフォームを追加し、入力値を`$instance`に格納、`update`メソッドで保存、`widget`メソッドで表示する処理を実装。フォームの追加は`form`メソッド内でHTMLを記述、`update`メソッドでは入力値のサニタイズを行い、`widget`メソッドで`$instance`から値を取得し表示。管理画面と公開側で動作確認を行い、意図通り表示されることを確認し、簡易的なウィジェット作成が完了した。

 

WordPressのウィジェットを作ってみた1

/** Geminiが自動生成した概要 **/
WordPressプラグインのPHP記述を簡略化するため、ウィジェットを作成する方法を紹介。ウィジェットとは、プラグイン的な機能をサイドバーなどに挿入できる機能。HogeWorldウィジェットを作成し、hoge_world_widget.phpにWP_Widgetクラスを継承したコードを記述。プラグインを有効化し、ウィジェットをサイドバーに挿入することで"hoge world!!"と表示されることを確認。設定画面の追加については次回へ続く。

 

WordPressのプラグインを作ってみた2

/** Geminiが自動生成した概要 **/
WordPressプラグイン開発の続き。プラグイン用の管理画面を作成し、設定値を反映させる方法を紹介。add_action('admin_menu')で管理画面へのメニュー登録、add_menu_page()でメニュー表示設定、hoge_world_option_page()で管理画面のHTMLを記述。get_option()で設定値取得、update_option()で設定値保存。フォームからの入力値を保存し、更新メッセージを表示する処理を追加。最後に、保存した設定値(名前)をプラグインの出力に反映させ、公開側で表示を確認した。

 

WordPressのプラグインを作ってみた1

/** Geminiが自動生成した概要 **/
WordPressプラグイン作成の入門記事。REST APIサービスのWordPress対応のため、プラグイン「hoge_world」を作成する例を紹介。プラグインファイル(/wp-content/plugins/hoge_world/hoge_world.php)を作成し、コメントと`HogeWorld::call()`関数を定義。管理画面のプラグイン一覧に表示され、テーマファイル(例:sidebar.php)に`<?php HogeWorld::call(); ?>`を記述することで「hoge worldだー!」と表示されることを示している。

 

MySQLのバックアップスクリプトを作成してみた

/** Geminiが自動生成した概要 **/
CPIの仮想専用サーバで開発中に、無料の50GBバックアップサーバを利用してMySQLのデータベースをバックアップするシェルスクリプトを作成した。スクリプトは`mysqldump`で全データベースをダンプし、gzipで圧縮、`scp`と`expect`を用いてパスワード認証でバックアップサーバに転送する。`expect`はscpのパスワード入力を自動化し、cronでの実行を可能にする。古いバックアップファイルの削除処理は未実装。`chmod +x`で実行権限を与え、cronで毎日実行するように設定。最後にバックアップサーバにbackupディレクトリを作成し、動作確認を行った。

 

SOY CMSの画像のリサイズでJPEGのロスレス圧縮を追加した

/** Geminiが自動生成した概要 **/
SOY CMSでサーバサイド画像リサイズを実装後、PageSpeed Insightsで「ロスレス圧縮で容量削減可能」と指摘されたため、jpegoptimを導入した。Ubuntuに`sudo apt-get install jpegoptim`でインストール後、`/CMSインストールディレクトリ/common/im.inc.php`の`imagejpeg`実行後に`jpegoptim $savepath`を実行するよう改修。これにより、ロスレス圧縮の指摘が解消され、PageSpeed Insightsのモバイルスコアが93から96に向上した。変更コードはフォーラムで配布されている。

 

SOY CMSの画像のリサイズ時にPNGの透過を無効にする

/** Geminiが自動生成した概要 **/
SOY CMSで画像リサイズを行う際、PNG画像の透過部分が黒くなる問題の解決策を紹介している。原因はアルファチャンネルの透過設定で、SOY CMSのリサイズ機能が透過に対応していないため。解決策として、`imagecreatetruecolor`後に`imagealphablending($dstImage, false);`と`imagesavealpha($dstImage, true);`を追加することで、透過PNGも正しくリサイズできる。修正はGDでのリサイズにのみ対応しており、ImageMagickは未対応。

 

SOY CMSに総当り攻撃を仕掛けてみる。その4

/** Geminiが自動生成した概要 **/
Go言語で書かれたSOY CMSへの総当り攻撃スクリプトを改良し、CSVファイルからIDとパスワードを読み込むように変更した。これにより、コードの可読性が向上し、辞書を使い回せるようになった。 実行結果から、指定のIDとパスワードでログイン成功を確認。今後の課題として、メモリ効率の改善、対象サイトURLの指定、ログイン成功時の判定処理などが挙げられている。

 

SOY CMSに総当り攻撃を仕掛けてみる。その3

/** Geminiが自動生成した概要 **/
Go言語で書かれたコードを用いて、SOY CMSへの総当たり攻撃を試行。パスワード候補の配列を定義し、ループ処理でログインを試みる。一致するパスワードが見つかった場合、処理を中断し「ログイン成功」とID、パスワードを表示する。今回は"********"でログイン成功。このコードはパスワード候補を増やすことで、複雑なパスワードでも突破可能。しかし、SOY CMS側では複数回ログイン失敗するとエラーが表示される対策が取られていることが確認された。

 

SOY CMSに総当り攻撃を仕掛けてみる。その2

/** Geminiが自動生成した概要 **/
Go言語でSOY CMSへの総当り攻撃コードを改良した。前回はトークンチェックで攻撃が無効化されたため、今回はトークン取得とセッションキー保持の処理を追加した。具体的には、ログインページからトークン値を抽出し、自作のCookieJarを用いてセッションキーを保持することで、正規のログインと同様にトークンを送信できるようにした。この改良により、辞書攻撃が可能になった。 最後に、管理画面URLの特定の容易性と攻撃のしやすさを指摘し、URLを複雑にする、IDを辞書攻撃されにくいものにするなどの対策の必要性を訴えている。

 

SOY CMSに総当り攻撃を仕掛けてみる。その1

/** Geminiが自動生成した概要 **/
SOY CMSへの総当たり攻撃を試行する記事。Go言語でログインを試みるコードを作成し、IDとパスワードを固定で送信、ログイン失敗を確認。本来は辞書データを用いて繰り返し実行する計画だったが、SOY CMSのログインフォームにトークンのチェックがない事を発見。GitHubで管理しているコードにトークンチェックを追加し、攻撃を阻止した。

 

社会人・学生向けにプログラミング教室をはじめました

/** Geminiが自動生成した概要 **/
小中学生向けに続き、社会人・学生向けプログラミング教室を開講しました。業務でHTMLやメール設定ができないことで損をしている人を多く見てきたため、その改善を支援したいと考えています。まずは、GoogleスプレッドシートのJavaScriptによる効率化、HTMLとJavaScriptを用いたLPページ改善を目標に指導を行います。内容が固まったら本格的に展開予定です。

 

Go言語で認証鍵を使ってSSHの接続を行う

/** Geminiが自動生成した概要 **/
Go言語でSSHの秘密鍵認証によるリモートサーバ接続を実装する方法が紹介されています。 `ioutil.ReadFile` で秘密鍵ファイル(id_rsa.pem)を読み込み、`ssh.ParsePrivateKey` でパース、`ssh.PublicKeys` で公開鍵を設定することでパスワード認証から秘密鍵認証に変更できます。`id_rsa.pem` ファイルは `openssl` コマンドで `id_rsa` から変換する必要があります。 サンプルコードでは、接続後、リモートサーバに空ファイルを作成する処理を実行しています。

 

Go言語でサーバのバックアップの仕組みを作ろう。SSH編

/** Geminiが自動生成した概要 **/
Go言語でサーバのバックアップを作成するため、SSH接続を用いたファイルコピーから、Zipファイルのダウンロード方式に変更された。 `golang.org/x/crypto/ssh` パッケージを利用し、SSH接続を確立、リモートでコマンドを実行するテストコードが作成された。このコードは、指定したサーバに接続し、空のファイル`empty.txt`を作成することに成功。今後の開発は、このSSH接続とコマンド実行機能をベースに、Zipファイルのダウンロード処理を実装する方向で進められる。

 

Go言語でサーバのバックアップの仕組みを作ろう。ファイルの更新編

/** Geminiが自動生成した概要 **/
Go言語でサーバのバックアップスクリプトを改良し、ファイルの更新日時をチェックするようにした。前回は全ファイルをコピーしていたが、今回はバックアップ元と先のファイルの更新日時を比較し、元ファイルが新しい場合のみコピーする処理を追加。`os.FileInfo`の`ModTime()`メソッドで更新日時を取得し、Unixタイムに変換して比較することで実現した。コード例では`filepath.Walk`でファイルを走査し、更新日時が新しいファイルのみ`io.Copy`でコピーしている。

 

Go言語でサーバのバックアップの仕組みを作ろう。Walk編

/** Geminiが自動生成した概要 **/
Go言語でファイルサーバのバックアップを作成する過程の記録。今回は同一PC内でのディレクトリとファイルコピーを実装。`filepath.Walk`でディレクトリ構造を走査し、`os.Stat`でバックアップ先にディレクトリが存在しなければ`os.Mkdir`で作成。ファイルは`os.Open`、`os.Create`、`io.Copy`でコピー。`tree`コマンドでコピー結果を確認し、ディレクトリ構造とファイル内容が正しくコピーされたことを確認。ただし、ファイル更新日時を考慮したコピー処理は未実装。

 

Terminator上でEmacsを起動すればxclipが使えるのか?

/** Geminiが自動生成した概要 **/
Emacsでxclipを使いたいが、tmuxではコピーモードの仕様でうまくいかない。そこで、itermのような端末を探し、terminatorをインストール。分割もでき、Emacsからシステムのクリップボードへコピー、貼り付けが期待通りに動作した。さらに、terminatorの別ウィンドウのEmacs間でもコピー、貼り付けができた。結果、開発環境をTerminator + Zsh + Emacsにすることに決定。

 

Emacsでクリップボードを使ってコピペしたい

/** Geminiが自動生成した概要 **/
Emacsでクリップボードの共有設定をしたが、GUI環境では動作するものの、端末(emacs -nw)では動作しない問題に直面。xclipをインストールし設定を追加することで端末上でもコピペが可能になった。しかし、tmux上でEmacsを起動した場合はxclipが機能せず、更なる設定が必要な状況に陥っている。

 

tmuxでマウススクロールをした時、履歴ではなくスクロールしてほしい

/** Geminiが自動生成した概要 **/
tmuxでマウススクロールをすると、履歴が表示されてしまい、画面がスクロールしない問題に遭遇した。MySQLの実行結果など、画面に収まらない内容を確認する際に不便だったため、マウススクロールで画面をスクロールできるように設定を変更した。`.tmux_conf`ファイルに`set -g mouse on`と`set -g terminal-overrides 'xterm*:smcup@:rmcup@'`を記述し、tmuxを再起動することで、マウススクロールで画面がスクロールするようになった。

 

zshの起動と同時にtmuxも起動してほしい

/** Geminiが自動生成した概要 **/
zsh起動時にtmuxも自動起動させる方法について解説。zshの設定ファイル`.zshrc`に`[[ -z "$TMUX" && ! -z "$PS1" ]] && tmux`を追記することで実現。この設定により、端末起動時にtmuxが既に起動しているかどうかを`$TMUX`で確認し、起動していない場合は`tmux`コマンドを実行する。結果、端末起動と同時にtmuxも起動し、ステータスバーが表示されるようになる。

 

最高の開発環境を求めて

/** Geminiが自動生成した概要 **/
レシピのない環境で最高の開発環境を目指し、WindowsからUbuntuに移行した筆者は、Emacsを選択。シェルモードの使いにくさに悩み、zshを導入するもEmacsとシェルを同時に表示できない問題に直面。最終的にターミナルマルチプレクサtmuxを用いて、Emacsとzshを左右に配置する理想的な開発環境を実現した。今後の記事では、環境構築の詳細な手順を公開予定。

 

中学生にプログラミングを教えてみて。その5

/** Geminiが自動生成した概要 **/
中学生にプログラミングを教える中で、整数の割り算による正解率計算で予期せぬ結果になる例を紹介。C言語で整数の4割る5に100を掛けても、結果は0.000000%と表示される。これは整数演算で切り捨てが発生するため。また、0.2 + 0.12 の計算でも、結果は0.3200001と微妙にずれる。これはコンピュータが2進数で小数を表現する際の誤差によるもの。これらの例は、プログラミングを通して数学の理解を深める機会となるが、詳細な説明には数学的知識が必要となる。

 

中学生にプログラミングを教えてみて。その4

/** Geminiが自動生成した概要 **/
中学生にプログラミングを教える中で、コンピュータが0と1で動く仕組みを理解させるため、C言語で書いたコードをアセンブリ言語、さらにバイナリの実行ファイルに変換する過程を見せた。苦Cとコンピュータサイエンスの教科書を参考に、gccコマンドでアセンブルとコンパイルを行い、出力されたhoge.sとa.out(バイナリ)を提示。バイナリエディタで16進表示されたa.outから2進数での動作を想像させ、理解を促した。後々「コンピュータシステムの理論と実装」が理解を深める上で役立つと気づいた。

 

中学生にプログラミングを教えてみて。その3

/** Geminiが自動生成した概要 **/
中学生にプログラミングの関数を教える際、calc(calculate)やres(result)といった略語を使った説明が、生徒にとって理解の妨げになってしまった。calculationを学習していない生徒にとって、これらの語は自由に決められる名称だと認識できなかったため。改善策として、関数の名称を「tasu(足す)」のように、処理内容をローマ字表記にすることで、より直感的に理解できるように工夫した。ベストプラクティスよりも、まずはコードを書く楽しさを優先し、段階的に学習を進めることが重要。

 

中学生にプログラミングを教えてみて。その2

/** Geminiが自動生成した概要 **/
中学生にJavaScriptでプログラミングを教えるにあたり、canvasを使ったゲーム作成に興味を持つ生徒が多い一方、基礎習得の必要性を感じた筆者は、canvasの練習を通して、メソッドの活用、オブジェクトの理解、配列の利用という3つの重要項目を特定した。これらの概念を「おまじない」として片付けず、生徒に楽しく理解してもらう方法を模索し、計算機、名簿、タイピングソフトの作成を通して、実践的にコードに触れさせながら習熟させる方針を立てた。

 

中学生にプログラミングを教えてみて。その1

/** Geminiが自動生成した概要 **/
プログラミング未経験者がNPOで小中学生にプログラミングを教えることになった。教材選びでは、Scratchは力技での解決を招きやすく、PHPは環境構築が面倒、Javaは難易度が高いため却下。JavaScriptは環境構築が容易で、様々な可能性を秘めていることから採用。ただし、柔軟すぎるが故のコードの煩雑さを懸念し、自身もJavaScriptを改めて学び直すことにした。

 

SOY CMSのブロックで記事のランダム表示

/** Geminiが自動生成した概要 **/
SOY CMSのブロックで記事をランダム表示するスクリプトモジュールブロックのコードが紹介されています。指定したラベルの記事をランダムに並び替え、指定件数分出力します。 `/site(サイトID)/script/soycms_random.php` にPHPコードを記述し、テンプレートで `cms:label` にラベルID、`cms:count` に取得件数を指定することで利用できます。コードはフォーラムにもアップロードされています。記事の取得件数を指定しない場合は、該当ラベルのすべての記事を取得しランダムに表示します。

 

Goで運営しているサイトでLet's Encryptを利用してみた

/** Geminiが自動生成した概要 **/
Go製WebアプリをHTTP/2で運用するために、Let's EncryptでSSL証明書を取得した。取得手順は、letsencryptコマンドで証明書を作成し、Goのコードに証明書のパスを指定するだけ。`http.ListenAndServe`を`http.ListenAndServeTLS`に変更し、fullchain.pemとprivkey.pemのパスを設定することでHTTPS化。証明書取得後、サイトはHTTP/2で動作するようになった。

 

さくらのVPSにGoの環境を構築してみた

/** Geminiが自動生成した概要 **/
さくらのVPSにGo環境を構築し、アプリケーションサーバを起動した際のメモ。UbuntuにGit, Go, MySQLをインストールし、アプリをビルド、実行した。ポート80での起動はroot権限が必要だったため、`sudo ./app -addr=:80`で実行。バックグラウンド実行は`&`を追加し、停止は`kill -KILL プロセスID`を使用。セキュリティ設定は別途必要。

 

Goで立ち上げたサーバを停止した後、再度同じポートで立ち上げる

/** Geminiが自動生成した概要 **/
GoでWebアプリを開発し、Ctrl+Zで停止した後に同じポートで再起動しようとしたら`address already in use`エラーが発生した。停止ではなく、プロセスが生きていたためポートが使用中だった。`ps`コマンドでプロセスIDを確認し、`kill -KILL [PID]`でプロセスを終了させた後、再起動に成功した。ブラウザでWebアプリの画面が表示され、サーバが正常に動作していることを確認。これは土壌分析アプリsoil2の開発中に遭遇した問題で、プロセスをkillすることで解決できた。

 

Dockerの他コンテナにあるSOY CMSからMySQLのコンテナにアクセスしてみる

/** Geminiが自動生成した概要 **/
Docker Composeを用いて、PHP7/ApacheとMySQLのコンテナを連携させ、SOY CMSを動作させる方法を解説。MySQLコンテナでは`bind-address`を指定し、PHPコンテナでは`pdo_mysql`拡張をインストールする必要がある。データベース接続設定では、MySQLコンテナの内部IPアドレスとポート(3306)を指定。SOY CMSのデータベース設定ファイル(mysql.php)を適切に編集することで、コンテナ間のデータベースアクセスを実現。記事では、`docker-compose.yml`の設定例や、コンテナ内でのデータベース作成手順、SOY CMSの初期設定画面へのアクセス方法などを示している。また、PHP7環境でのSOY CMS動作に関する修正はGitHubで公開されている。

 

Dockerで作ったMySQLのコンテナにホストからアクセスしてみる

/** Geminiが自動生成した概要 **/
DockerでMySQLのコンテナを作成し、ホストからアクセスする手順を解説しています。まず、文字コード設定済みのDockerfileとcharset.cnfを用意し、`docker build`でイメージを作成。`docker run`でコンテナを起動し、`-p 12345:3306`でポートフォワーディングを設定。ホストからは`mysql -u root -p -h 127.0.0.1 -P 12345`でコンテナ内のMySQLに接続できました。

 

さくらのVPSにPHP7を入れてSOY CMSを動かしてみた

/** Geminiが自動生成した概要 **/
さくらのVPSにPHP7をインストールし、SOY CMSを動かす手順を解説した記事。共有サーバーの表示速度低下を改善するため、VPSに移行。手順は既存記事を参考に、PHPインストール部分を更新。 Apache2.4インストール後、Ondřej Surý氏のPPAを用いてPHP7.0を導入し、関連モジュールをインストール、Apache2の設定を行った。PHP7でSOY CMSを動かすにはファイル修正が必要で、修正済みパッケージはsaitodev.co/soycms/からダウンロード可能。

 

Dockerで構築したPHP7の環境でSOY CMSを動かしてみる

/** Geminiが自動生成した概要 **/
Docker上のPHP7環境でSOY CMSを動かす手順を解説。前回はmbstringが不足しエラーが発生したが、Dockerfileに`docker-php-ext-install mbstring`を追加し解決。elfinderは未対応だが、その他は動作し爆速に。Dockerfileとphp.iniの設定例、コンテナ起動コマンドも紹介。修正版SOY CMSはGitHubで公開中。

 

DockerでPHP7の環境を構築してみる2

/** Geminiが自動生成した概要 **/
DockerでPHP7環境を構築し、ホスト側のディレクトリをコンテナにマウントしてファイル操作を容易にした。`-v`オプションで`/home/saito/workspace/docker/php7`をコンテナの`/var/www/html`にマウントし、ホスト側に配置した`hoge.php`をブラウザで実行できた。しかし、SOY CMSを導入したところ、`mb_language()`関数が未定義というエラーが発生。コンテナ内に`php.ini`が見つからず、設定が必要になったため、今後の課題とした。

 

DockerでPHP7の環境を構築してみる

/** Geminiが自動生成した概要 **/
Dockerを使ってPHP7環境を構築する方法を紹介しています。UbuntuへのDockerインストール手順、Dockerfileの作成、コンテナイメージのビルド、コンテナの起動、PHPバージョン確認、ブラウザでのphpinfo表示確認までを解説。Dockerを使うことで、簡単にPHP7環境を構築し、動作確認できることを示しています。ルートディレクトリ操作の課題は残っていますが、Apache設定などを省略できる手軽さがメリットです。

 

さくらのVPSでSOY CMSを動かした時のメモ

/** Geminiが自動生成した概要 **/
Apacheサーバのバージョン表示はセキュリティリスクとなるため、非表示にすることが推奨されています。本記事では、Apacheの設定ファイル`httpd.conf`または`apache2.conf`を編集することで、バージョン情報を隠す方法を解説しています。具体的には、`ServerTokens`ディレクティブを`Prod`に設定することで、公開されるサーバ情報を最小限に抑えられます。また、`ServerSignature`ディレクティブを`Off`にすることで、エラーページなどからサーバのバージョン情報が削除されます。これらの設定変更後、Apacheを再起動することで変更が反映されます。さらに、セキュリティ対策としてmod_securityなどのセキュリティモジュール導入も推奨しています。


Powered by SOY CMS  ↑トップへ